Wie implementiert man Fuzzy-Suche mit SQLite FTS3?

8

Ich habe bereits integrierte Suche basierend auf der offiziellen Android-Dokumentation und Ich verwende das folgende SQLite-Schema und Abfrage:

%Vor%

Ich frage mich, wie kann ich es verlängern? um Folgendes zu ermöglichen:

Sagen Sie, dass ich einige Elemente benannt habe:

  • Mein schicker Gegenstand
  • Mein geheimes Item
  • Punkt # 1
  • Dein schicker Gegenstand

Wenn der Benutzer blah in das Suchfeld eingibt, wird in den Suchergebnissen Folgendes angezeigt:

  • my
    • Mein Fancy Item
    • Mein Secret Item
  • mfi
    • M y F ancy I tem
  • fan item , fanit , fit
    • Mein Fan cy Es em
    • Ihr Fan cy Es em
  • it , item , im , itm
    • Meine Phantasie ich te m
    • Mein Geheimnis Ich te m
    • Ich te m # 1
    • Deine Phantasie ich te m

Die Ergebnisse sollten nach der Qualität der Übereinstimmung sortiert werden. Wenn die Buchstaben weiter entfernt sind, sollten sie niedriger als eine exakte Übereinstimmung sein, wie für mfi : "My Fancy Item" sollte als letzter und "MFI dingy "sollte zuerst rangieren (wenn es einen solchen Gegenstand gab).

Hinweis: Mein min SDK ist API Level 10, was bedeutet, dass es SQLite funktionieren muss 3.6.22 .

Ähnliche Funktionen finden Sie hauptsächlich in IDEs:

TWiStErRob 19.12.2014, 10:36
quelle

2 Antworten

3

SQLites FTS ermöglicht Suchvorgänge nur nach ganzen Wörtern oder nach Wortpräfixen.

Es gibt keine integrierte Funktionalität für unscharfe Suchen wie diese. (Und mit der Android-Datenbank-API können Sie keine benutzerdefinierten virtuellen Tabellenimplementierungen hinzufügen.)

    
CL. 19.12.2014, 10:47
quelle
1

Ich entspannte meine Kriterien, um alle Wortanfänge zu suchen:

%Vor%

es funktioniert ziemlich gut. Nicht typo-resistent, aber es fühlt sich natürlich an, wenn ich es benutze.

    
TWiStErRob 14.07.2015 17:14
quelle