sql >> Databasteknik >  >> RDS >> SQLite

Komma igång med SQLite Full-text Search

Sammanfattning :i den här handledningen kommer du att lära dig hur du använder SQLites fulltextsökningsfunktion genom att använda FTS5 virtuella tabellmodulen.

Introduktion till SQLite-fulltextsökning

En virtuell tabell är ett anpassat tillägg till SQLite. Ett virtuellt bord är som ett vanligt bord. Skillnaden mellan en virtuell tabell och en normal tabell är varifrån data kommer, det vill säga när du bearbetar en normal tabell kommer SQLite åt databasfilen för att hämta data. Men när du kommer åt en virtuell tabell anropar SQLite den anpassade koden för att hämta data. Den anpassade koden kan ha specificerad logik för att hantera vissa uppgifter som att hämta data från flera datakällor.

För att använda fulltextsökning i SQLite använder du FTS5 virtuell tabellmodul.

Följande CREATE VIRTUAL TABLE statement skapar en FTS5-tabell med två kolumner:

CREATE VIRTUAL TABLE table_name 
USING FTS5(column1,column2...);
Code language: SQL (Structured Query Language) (sql)

Observera att du inte kan lägga till typer, begränsningar eller PRIMARY KEY deklarationen i CREATE VIRTUAL TABLE uttalande för att skapa en FTS5-tabell. Om du gör det kommer SQLite att ge ett felmeddelande.

Som att skapa en normal tabell utan att ange primärnyckelkolumnen, lägger SQLite till en implicit rowid kolumnen till FTS5-tabellen.

Följande exempel skapar en FTS5-tabell med namnet posts med två kolumner title och body .

CREATE VIRTUAL TABLE posts 
USING FTS5(title, body);
Code language: SQL (Structured Query Language) (sql)

I likhet med en vanlig tabell kan du infoga data i posts tabell enligt följande:

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)

Och fråga data mot det:

SELECT * FROM posts;
Code language: SQL (Structured Query Language) (sql)

Fråga data med fulltextsökning

Du kan köra en fulltextfråga mot en FTS5-tabell på något av dessa tre sätt.

Använd först en MATCH operatorn i WHERE-satsen i SELECT-satsen. Till exempel för att få alla rader som har termen fts5 , använder du följande fråga:

SELECT * 
FROM posts 
WHERE posts MATCH 'fts5';
Code language: SQL (Structured Query Language) (sql)

För det andra, använd en lika (= ) operatorn i WHERE satsen i SELECT påstående. Följande sats returnerar samma resultat som satsen ovan:

SELECT * 
FROM posts 
WHERE posts = 'fts5';
Code language: SQL (Structured Query Language) (sql)

För det tredje, använd en funktionssyntax för tabellvärden. På så sätt använder du söktermen som första tabellargument:

SELECT * 
FROM posts('fts5');
Code language: SQL (Structured Query Language) (sql)

Som standard är FTS5 skiftlägesoberoende. Den behandlar termerna fts5 FTS5 och Fts5 samma sak.

För att sortera sökresultaten från de mest till minst relevanta, använder du ORDER BY-satsen enligt följande:

SELECT * 
FROM posts 
WHERE posts MATCH 'text' 
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)

Använder frågesyntax i fulltext

En sökfråga i fulltext består av fraser, där varje fras är en ordnad lista med en eller flera tokens. Du kan använda operatorn "+" för att sammanfoga två fraser som följande exempel:

"learn SQLite"
"learn + SQLite"
Code language: SQL (Structured Query Language) (sql)

FTS5 avgör om ett dokument matchar en fras om dokumentet innehåller minst en undersekvens av tokens som matchar sekvensen av tokens som används för att konstruera frasen.

Följande fråga returnerar alla dokument som matchar söktermen Learn SQLite :

SELECT * 
FROM posts 
WHERE posts MATCH 'learn SQLite';
Code language: SQL (Structured Query Language) (sql)

Prefixsökningar

Du kan använda asterisken (*) som ett prefix. När en fras innehåller asterisken (*) kommer den att matcha alla dokument som innehåller symbolen som börjar med frasen. Till exempel matchar sökning* med sökning, sökning, sökningar etc. Se följande exempel:

SELECT * 
FROM posts
WHERE posts = 'search*';Code language: SQL (Structured Query Language) (sql)

Booleska operatorer

Du kan använda den booleska operatorn t.ex. NOT , OR , eller AND för att kombinera frågor.

  • q1 OCH q2:matchar om både q1 och q2-frågor matchar.
  • q1 ELLER q2:matchar om antingen fråga q1 eller q2 matchar.
  • q1 INTE q2:matchar om fråga q1 matchar och q2 inte matchar.

Till exempel för att få de dokument som matchar learn frasen men matchar inte FTS5 fras, använder du NOT operatör enligt följande:

SELECT * 
FROM posts 
WHERE posts MATCH 'learn NOT text';
Code language: SQL (Structured Query Language) (sql)

För att söka efter dokument som matchar någon av fraserna learn eller text , använder du OR operator som följande exempel:

SELECT * 
FROM posts 
WHERE posts MATCH 'learn OR text';
Code language: SQL (Structured Query Language) (sql)

För att hitta de dokument som matchar både SQLite och sökning använder du AND operatör som visas nedan:

SELECT * 
FROM posts 
WHERE posts MATCH 'sqlite AND searching';
Code language: SQL (Structured Query Language) (sql)

För att ändra operatorns prioritet använder du parentes för att gruppera uttryck. Till exempel:

SELECT * 
FROM posts 
WHERE posts MATCH 'search AND sqlite OR help';
Code language: SQL (Structured Query Language) (sql)

Uttrycket returnerar dokument som matchar search och sqlite eller help . För att hitta de dokument som matchar search och antingen sqlite eller help , använder du parentes enligt följande:

SELECT * 
FROM posts 
WHERE posts MATCH 'search AND (sqlite OR help)';
Code language: SQL (Structured Query Language) (sql)

Inbyggda hjälpfunktioner

SQLite tillhandahåller tre inbyggda hjälpfunktioner som kan användas i fulltextfrågor på FTS5-tabellen.

  • bm25() returnerar ett värde som representerar den aktuella matchningens noggrannhet, det lägre värdet betyder en bättre matchning.
  • highlight() hjälpfunktionen returnerar en kopia av texten med söktermer omgivna av en specificerad markering, t.ex.sökterm
  • snippet() väljer ett kort fragment av text för att maximera antalet söktermer som den innehåller.

Till exempel använder följande fråga funktionen highlight() för att dekorera söktermerna med taggen:

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)

I den här handledningen har du lärt dig hur du använder SQLites fulltextsökfunktioner via FTS5 virtuell tabellmodul.


  1. Hur får man UTF-8 att fungera i Java webbappar?

  2. 4 sätt att hitta rader som innehåller versaler i PostgreSQL

  3. Arbetar dina anställda på distans? Så här håller du din data säker.

  4. Uppdatera ett jobbsteg för ett SQL Server Agent Job (T-SQL)