SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Erste Schritte mit der SQLite-Volltextsuche

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.