2012-08-01 5 views
7

Ich verwende SQLite FTS Erweiterung in meinem iOS-Anwendung. Es funktioniert gut, aber das Problem ist, dass es nur Zeichenfolge Präfixe übereinstimmt (oder beginnt mit der Schlüsselwortsuche).endet mit (Suffix) und enthält String-Suche in SQLite FTS mit MATCH

dh

SELECT FROM Tabellenname WHERE Spalten MATCH 'Suchbegriff *'

funktioniert, aber

SELECT FROM Tabellenname WHERE Spalten MATCH '* Suchbegriff'

oder

SELECT FROM Tabellenname WHERE Spaltenname MATCH '* Suchbegriff *'

nicht.

Gibt es eine Abhilfe für diesen oder irgendeine Weise FTS zu verwenden, um eine Abfrage wie „LIKE‚% Suchbegriff%‘“ Abfrage zu erstellen.

EDIT:

Wie Retterdesdialogs wies darauf hin, den gesamten Text in umgekehrter Reihenfolge zu speichern und eine Präfixsuche auf der Rückseite Zeichenfolge ausgeführt ist eine mögliche Lösung für Ende mit/Suffixsuchliste Problem, das meine ursprüngliche Frage war, aber Es funktioniert nicht für 'enthält' Suche. Ich habe die Frage entsprechend aktualisiert.

+0

Die meisten Benutzer erwarten suchen Unter String-Suche zu sein, würde ich vor allem sagen, weil Google. Ich hoffe, dass die SQLite-Jungs an der Sub-String-Unterstützung in FTS arbeiten. – Diederik

Antwort

1

In meinem iOS und Android-Anwendungen, ich habe genau den Grund, weg von FTS Suche gescheut, dass es nicht dem Mangel an Suffix Anfragen aufgrund Teilzeichenfolge paßt nicht unterstützt.

Die Abhilfen scheinen kompliziert.

Ich habe mit LIKE Abfragen zurückgegriffen, die während weniger performant als MATCH, meine Bedürfnisse serviert.

1

Die Abhilfe ist die umgekehrte Zeichenfolge in einer Extraspalte zu speichern. Siehe diesen Link (es ist nicht genau das gleiche sollte es eine Idee geben):

Search Suffix using Full Text Search

+0

Vielen Dank für Ihre Antwort. Es hilft, aber löst mein Problem nicht vollständig. – lukya

2

Um es für enthält Abfragen zu arbeiten, können Sie alle Suffixe der Begriffe speichern müssen Sie in der Lage sein wollen, suchen . Dies hat den Nachteil, dass die Datenbank wirklich groß wird, aber das kann durch Komprimieren der Daten vermieden werden.

SQLite FTS contains and suffix matches