2012-08-01 7 views
7

Używam rozszerzenia SQLite FTS w mojej aplikacji na iOS. Działa dobrze, ale problem polega na tym, że dopasowuje tylko przedrostki ciągów (lub rozpoczyna się od wyszukiwania słów kluczowych).kończy się (sufiks) i zawiera wyszukiwanie ciągów przy użyciu MECZU w SQLite FTS

tj

SELECT FROM nazwa_tabeli GDZIE NazwaKolumny MATCH 'searchterm *'

prace ale

SELECT FROM nazwa_tabeli GDZIE NazwaKolumny MATCH '* searchterm'

lub

SELECT FROM nazwa tabeli WHERE nazwa kolumny MATCH '* searchterm *'

nie.

Czy istnieje sposób obejścia tego lub innego sposobu użycia FTS do zbudowania zapytania podobnego do zapytania "LIKE"% searchterm% "".

EDIT:

Jak podkreślił Retterdesdialogs, przechowywanie cały tekst w odwrotnej kolejności i prowadzenie przeszukiwanie prefiksu na odwrotnej łańcucha jest możliwe rozwiązanie dla końcach/przyrostkiem problemu wyszukiwania, który był moim oryginalne pytanie, ale to nie działa dla "zawiera" wyszukiwania. Odpowiednio zaktualizowałem pytanie.

+0

Większość użytkowników oczekuje, że wyszukiwanie będzie wyszukiwanie podciągiem, powiedziałbym głównie z powodu Google. Mam nadzieję, że faceci SQLite pracują nad obsługą podciągów w FTS. – Diederik

Odpowiedz

1

W moich iOS i Android aplikacji, I unikają poszukiwaniu FTS z dokładnie tego powodu, że nie obsługuje podciąg mecze z powodu braku zapytań przyrostka.

Obejścia wydają się skomplikowane.

Korzystałem z zapytań typu LIKE, które będąc mniej wydajne niż MATCH, służyły moim potrzebom.

2

zmusić go do pracy zawiera pytania, trzeba przechowywać wszystkie sufiksy z warunkami, które chcesz mieć możliwość wyszukiwania . Ma to tę wadę, że baza danych jest naprawdę duża, ale można tego uniknąć, kompresując dane.

SQLite FTS contains and suffix matches