Login
Newsletter
Werbung

Do, 13. Oktober 2016, 15:01

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.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung