FTS – Volltextsuche mit SQLite
Andere Tokenizer nutzen
Wie weiter oben bereits erwähnt, »zerlegt« SQLite beim Einsatz von FTS den Text in einzelne Worte, die Tokens. Standardmäßig ist jedes Wort ein Token, auch dann, wenn Worte den gleichen Stamm haben wie z.B. »played« und »playing«. SQLite bietet aber die Möglichkeit, einen Stemmer einzusetzen, der die Wörter auf die Normalform reduziert. Das funktioniert unter Angabe der Option »tokenize=porter« beim Anlegen der FTS-Tabelle. Dann kommt der Porter-Stemmer-Algorithmus zum Einsatz.
Mit den folgenden Befehlen wird die Tabelle data_stem
angelegt, als Tokenizer der Porter-Stemmer vorgegeben und drei Datensätze eingefügt:
sqlite> CREATE VIRTUAL TABLE data_stem USING fts3(tokenize=porter); sqlite> INSERT INTO data_stem(content) VALUES ('Yesterday I played football'); sqlite> INSERT INTO data_stem(content) VALUES ('Today, I am playing again'); sqlite> INSERT INTO data_stem(content) VALUES ('Tomorrow I will do something different');
Die Suche nach »play« findet jetzt zwei Einträge, die passen:
sqlite> SELECT * FROM data_stem WHERE content MATCH 'play'; Yesterday I played football Today, I am playing again
da sowohl »played« als auch »playing« von der Grundform »play« abgeleitet sind.
Leider funktioniert der Stemmer nur mit Englisch. Werden z.B. deutsche Sätze eingefügt, erfolgt das Stemming leider nicht zuverlässig.
Weitere Möglichkeiten
Die hier im Artikel gezeigten Möglichkeiten der Volltextsuche mittels FTS-Tabellen in SQLite zeigen nur einen Teil der Funktionalität. Die Dokumentation zu FTS3/4 ist aber äußerst umfangreich, enthält sehr viele Beispiele und ist durchaus lesenswert, wenn man sich näher mit SQLite und FTS beschäftigen möchte.
Fazit
SQLite bietet neben den »normalen« Funktionen einer relationalen Datenbank mit FTS auch eine Möglichkeit zur Volltextsuche. Die Nutzung dieser Funktion ist nicht weiter schwierig, die Funktionalität für die meisten Aufgaben völlig ausreichend und die Suche ist wesentlich performanter als eine klassische Abfrage mit konventionellen SQL-Befehlen.
Autoreninformation
Jochen Schnelle (Webseite) nutzt SQLite-Datenbanken selber für diverse Projekte.
Dieser Artikel ist in freiesMagazin 10/2016 (ISSN 1867-7991) erschienen. Veröffentlichung mit freundlicher Genehmigung.