Tabelle für Volltextsuche mit Daten aus anderer Tabelle befüllen

Eine Volltextsuche ist mittels SQlite sehr schnell konstruiert. Nur was soll man finden, wenn nicht’s da ist? Wie man schnell, sauber und bequem die Volltextsuche (FTS) mit Leben füllt, wird hier gezeigt.

Die Idee eine bestehende Datenbank um eine Volltextsuche zu erweitern. Dafür wird sich an einer (zuvor gesicherten) bestehenden Datenbank angemeldet und eine virtuelle Tabelle für die Volltextsuche erstellt.

sqlite3 blog.db
--SQL
CREATE VIRTUAL TABLE article_fts USING fts4(name, title, text, tag);

Wie in vielen Datenbanksystemen, lässt sich auch SQLite dazu bewegen, Tabellen mittels SELECT Anweisungen zu erstellen.

--SQL
INSERT INTO article_fts (docid, name, title, text, tag) SELECT id, name, title, content, tag FROM article;

Zugegeben, eigentlich ist die INSERT-Anweisung etwas einfacher, aber ich wollte hiermit gleich mal auf Folgeprobleme eingehen; sie werden kommen. ;-)

Einfacher sieht es so aus:

--SQL
CREATE VIRTUAL TABLE article_fts USING fts4(id, name, title, content, tag);
INSERT INTO article_fts SELECT id, name, title, content, tag FROM article;

…aber einfach kann ja jeder! ;-)

Ach ja, der finale Test:

--SQL
SELECT id FROM article_fts WHERE article_fts MATCH 'test';