Zusammenfassung :In diesem Tutorial erfahren Sie, wie Sie die SQLite-Volltextsuchfunktion mithilfe des virtuellen Tabellenmoduls von FTS5 verwenden.
Einführung in die SQLite-Volltextsuche
Eine virtuelle Tabelle ist eine benutzerdefinierte Erweiterung von SQLite. Ein virtueller Tisch ist wie ein normaler Tisch. Der Unterschied zwischen einer virtuellen Tabelle und einer normalen Tabelle besteht darin, woher die Daten kommen, d. h. wenn Sie eine normale Tabelle verarbeiten, greift SQLite auf die Datenbankdatei zu, um Daten abzurufen. Wenn Sie jedoch auf eine virtuelle Tabelle zugreifen, ruft SQLite den benutzerdefinierten Code auf, um die Daten abzurufen. Der benutzerdefinierte Code kann über eine bestimmte Logik verfügen, um bestimmte Aufgaben zu erledigen, z. B. das Abrufen von Daten aus mehreren Datenquellen.
Um die Volltextsuche in SQLite zu verwenden, verwenden Sie das virtuelle Tabellenmodul von FTS5.
Die folgende CREATE VIRTUAL TABLE
-Anweisung erstellt eine FTS5-Tabelle mit zwei Spalten:
CREATE VIRTUAL TABLE table_name
USING FTS5(column1,column2...);
Code language: SQL (Structured Query Language) (sql)
Beachten Sie, dass Sie keine Typen, Einschränkungen oder PRIMARY KEY
hinzufügen können Deklaration in CREATE VIRTUAL TABLE
Anweisung zum Erstellen einer FTS5-Tabelle. Andernfalls gibt SQLite einen Fehler aus.
Wie beim Erstellen einer normalen Tabelle ohne Angabe der Primärschlüsselspalte fügt SQLite eine implizite rowid
hinzu -Spalte in die FTS5-Tabelle.
Das folgende Beispiel erstellt eine FTS5-Tabelle mit dem Namen posts
mit zwei Spalten title
und body
.
CREATE VIRTUAL TABLE posts
USING FTS5(title, body);
Code language: SQL (Structured Query Language) (sql)
Ähnlich wie bei einer normalen Tabelle können Sie Daten in die posts
einfügen Tabelle wie folgt:
INSERT INTO posts(title,body)
VALUES('Learn SQlite FTS5','This tutorial teaches you how to perform full-text search in SQLite using FTS5'),
('Advanced SQlite Full-text Search','Show you some advanced techniques in SQLite full-text searching'),
('SQLite Tutorial','Help you learn SQLite quickly and effectively');
Code language: SQL (Structured Query Language) (sql)
Und Daten dagegen abfragen:
SELECT * FROM posts;
Code language: SQL (Structured Query Language) (sql)
Abfrage von Daten per Volltextsuche
Sie können auf eine dieser drei Arten eine Volltextabfrage für eine FTS5-Tabelle ausführen.
Verwenden Sie zuerst einen MATCH
Operator in der WHERE-Klausel der SELECT-Anweisung. Zum Beispiel, um alle Zeilen zu erhalten, die den Begriff fts5
enthalten verwenden Sie die folgende Abfrage:
SELECT *
FROM posts
WHERE posts MATCH 'fts5';
Code language: SQL (Structured Query Language) (sql)
Verwenden Sie zweitens ein Gleichheitszeichen (=
)-Operator im WHERE
-Klausel des SELECT
Erklärung. Die folgende Anweisung gibt das gleiche Ergebnis wie die obige Anweisung zurück:
SELECT *
FROM posts
WHERE posts = 'fts5';
Code language: SQL (Structured Query Language) (sql)
Verwenden Sie drittens eine Funktionssyntax mit Tabellenwerten. Auf diese Weise verwenden Sie den Suchbegriff als erstes Tabellenargument:
SELECT *
FROM posts('fts5');
Code language: SQL (Structured Query Language) (sql)
Standardmäßig ist FTS5 unabhängig von Groß- und Kleinschreibung. Es behandelt die Begriffe fts5
FTS5
und Fts5
das gleiche.
Um die Suchergebnisse von den relevantesten zu den am wenigsten relevanten zu sortieren, verwenden Sie die ORDER BY-Klausel wie folgt:
SELECT *
FROM posts
WHERE posts MATCH 'text'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
Volltext-Abfragesyntax verwenden
Eine Volltextsuchabfrage besteht aus Phrasen, wobei jede Phrase eine geordnete Liste von einem oder mehreren Token ist. Sie können den „+“-Operator verwenden, um zwei Sätze wie im folgenden Beispiel zu verketten:
"learn SQLite"
"learn + SQLite"
Code language: SQL (Structured Query Language) (sql)
FTS5 bestimmt, ob ein Dokument mit einem Ausdruck übereinstimmt, wenn das Dokument mindestens eine Unterfolge von Token enthält, die mit der Folge von Token übereinstimmt, die zum Erstellen des Ausdrucks verwendet wurde.
Die folgende Abfrage gibt alle Dokumente zurück, die mit dem Suchbegriff Learn SQLite
übereinstimmen :
SELECT *
FROM posts
WHERE posts MATCH 'learn SQLite';
Code language: SQL (Structured Query Language) (sql)
Präfixsuche
Sie können das Sternchen (*) als Präfix-Token verwenden. Wenn ein Ausdruck das Sternchen (*) enthält, stimmt er mit jedem Dokument überein, das das Token enthält, das mit dem Ausdruck beginnt. Zum Beispiel, Suche* stimmt mit Suchen, Suchen, Suchen usw. überein. Siehe folgendes Beispiel:
SELECT *
FROM posts
WHERE posts = 'search*';
Code language: SQL (Structured Query Language) (sql)
Boolesche Operatoren
Sie können den booleschen Operator verwenden, z. B. NOT
, OR
, oder AND
um Abfragen zu kombinieren.
- q1 UND q2:stimmt überein, wenn sowohl q1- als auch q2-Abfragen übereinstimmen.
- q1 OR q2:stimmt überein, wenn Abfrage q1 oder q2 übereinstimmt.
- q1 NOT q2:stimmt überein, wenn Abfrage q1 übereinstimmt und q2 nicht übereinstimmt.
Zum Beispiel, um die Dokumente zu erhalten, die mit learn
übereinstimmen Phrase, stimmt aber nicht mit FTS5
überein verwenden Sie den Ausdruck NOT
Operator wie folgt:
SELECT *
FROM posts
WHERE posts MATCH 'learn NOT text';
Code language: SQL (Structured Query Language) (sql)
So suchen Sie nach Dokumenten, die mit einem der beiden Ausdrücke learn
übereinstimmen oder text
verwenden Sie das OR
Operator wie im folgenden Beispiel:
SELECT *
FROM posts
WHERE posts MATCH 'learn OR text';
Code language: SQL (Structured Query Language) (sql)
Um die Dokumente zu finden, die sowohl mit SQLite als auch mit der Suche übereinstimmen, verwenden Sie das AND
Operator wie unten gezeigt:
SELECT *
FROM posts
WHERE posts MATCH 'sqlite AND searching';
Code language: SQL (Structured Query Language) (sql)
Um die Operatorpriorität zu ändern, verwenden Sie Klammern, um Ausdrücke zu gruppieren. Zum Beispiel:
SELECT *
FROM posts
WHERE posts MATCH 'search AND sqlite OR help';
Code language: SQL (Structured Query Language) (sql)
Die Anweisung gibt Dokumente zurück, die mit search
übereinstimmen und sqlite
oder help
. Um die passenden Dokumente zu finden, search
und entweder sqlite
oder help
, verwenden Sie Klammern wie folgt:
SELECT *
FROM posts
WHERE posts MATCH 'search AND (sqlite OR help)';
Code language: SQL (Structured Query Language) (sql)
Eingebaute Hilfsfunktionen
SQLite bietet drei eingebaute Hilfsfunktionen, die in Volltextabfragen für die FTS5-Tabelle verwendet werden können.
- Der
bm25()
gibt einen Wert zurück, der die Genauigkeit der aktuellen Übereinstimmung darstellt, der niedrigere Wert bedeutet eine bessere Übereinstimmung. - Das
highlight()
Hilfsfunktion gibt eine Kopie des Textes mit Suchbegriffen zurück, die von einem bestimmten Markup umgeben sind, z. B. Suchbegriff - Das
snippet()
wählt ein kurzes Textfragment aus, um die Anzahl der darin enthaltenen Suchbegriffe zu maximieren.
Die folgende Abfrage verwendet beispielsweise die Highlight()-Funktion, um die Suchbegriffe mit dem Tag zu ergänzen:
SELECT highlight(posts,0, '<b>', '</b>') title,
highlight(posts,1, '<b>', '</b>') body
FROM posts
WHERE posts MATCH 'SQLite'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
In diesem Lernprogramm haben Sie gelernt, wie Sie die SQLite-Volltextsuchfunktionen über das virtuelle FTS5-Tabellenmodul verwenden.