sql >> Database teknologi >  >> RDS >> SQLite

Kom godt i gang med SQLite fuldtekstsøgning

Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite fuldtekst søgefunktionen ved at bruge FTS5 virtuelle tabelmodulet.

Introduktion til SQLite fuldtekstsøgning

En virtuel tabel er en tilpasset udvidelse til SQLite. Et virtuelt bord er som et normalt bord. Forskellen mellem en virtuel tabel og en normal tabel er, hvor dataene kommer fra, dvs. når du behandler en normal tabel, får SQLite adgang til databasefilen for at hente data. Men når du får adgang til en virtuel tabel, kalder SQLite den tilpassede kode for at få dataene. Den brugerdefinerede kode kan have specificeret logik til at håndtere bestemte opgaver, såsom at hente data fra flere datakilder.

For at bruge fuldtekstsøgning i SQLite bruger du FTS5 virtuelt tabelmodul.

Følgende CREATE VIRTUAL TABLE sætning opretter en FTS5-tabel med to kolonner:

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

Bemærk, at du ikke kan tilføje typer, begrænsninger eller PRIMARY KEY erklæringen i CREATE VIRTUAL TABLE erklæring til oprettelse af en FTS5-tabel. Hvis du gør det, udsender SQLite en fejl.

Ligesom at oprette en normal tabel uden at angive den primære nøglekolonne, tilføjer SQLite en implicit rowid kolonne til FTS5-tabellen.

Følgende eksempel opretter en FTS5-tabel med navnet posts med to kolonner title og body .

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

I lighed med en normal tabel kan du indsætte data i posts tabel som følger:

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)

Og forespørg data mod det:

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

Forespørgsel efter data ved hjælp af fuldtekstsøgning

Du kan udføre en fuldtekstforespørgsel mod en FTS5-tabel på en af ​​disse tre måder.

Brug først en MATCH operator i WHERE-udtrykket i SELECT-sætningen. For eksempel for at få alle rækker, der har udtrykket fts5 , bruger du følgende forespørgsel:

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

For det andet skal du bruge en lig (= ) operator i WHERE klausul af SELECT udmelding. Følgende sætning returnerer det samme resultat som sætningen ovenfor:

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

For det tredje skal du bruge en funktionssyntaks med tabelværdier. På denne måde bruger du søgeordet som det første tabelargument:

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

Som standard er FTS5 sagsuafhængig. Den behandler termerne fts5 FTS5 og Fts5 det samme.

For at sortere søgeresultaterne fra de mest til de mindst relevante bruger du ORDER BY-klausulen som følger:

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

Brug af fuldtekstforespørgselssyntaks

En fuldtekstsøgeforespørgsel består af sætninger, hvor hver sætning er en ordnet liste over en eller flere tokens. Du kan bruge operatoren "+" til at sammenkæde to sætninger som følgende eksempel:

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

FTS5 bestemmer, om et dokument matcher en sætning, hvis dokumentet indeholder mindst én undersekvens af tokens, der matcher sekvensen af ​​tokens, der bruges til at konstruere sætningen.

Følgende forespørgsel returnerer alle dokumenter, der matcher søgeordet Learn SQLite :

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

Prefikssøgninger

Du kan bruge stjernen (*) som et præfiks-token. Når en sætning indeholder stjernen (*), vil den matche ethvert dokument, der indeholder det token, der begynder med sætningen. For eksempel matcher søgning* med søgning, søgning, søgninger osv. Se følgende eksempel:

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

Boolske operatorer

Du kan bruge den boolske operator, f.eks. NOT , OR , eller AND at kombinere forespørgsler.

  • q1 OG q2:matcher, hvis både q1 og q2 forespørgsler matcher.
  • q1 ELLER q2:matcher, hvis enten forespørgsel q1 eller q2 matcher.
  • q1 IKKE q2:matcher, hvis forespørgsel q1 matcher og q2 ikke matcher.

For eksempel for at få de dokumenter, der matcher learn sætning, men matcher ikke FTS5 sætning, bruger du NOT operatør som følger:

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

For at søge efter dokumenter, der matcher begge sætninger learn eller text , bruger du OR operator som følgende eksempel:

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

For at finde de dokumenter, der matcher både SQLite og søgning, bruger du AND operatør som vist nedenfor:

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

For at ændre operatorens forrang bruger du parentes til at gruppere udtryk. For eksempel:

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

Udsagnet returnerer dokumenter, der matcher search og sqlite eller help . For at finde de dokumenter, der matcher search og enten sqlite eller help , bruger du parentes som følger:

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

Indbyggede hjælpefunktioner

SQLite har tre indbyggede hjælpefunktioner, der kan bruges i fuldtekstforespørgsler på FTS5-tabellen.

  • bm25() returnerer en værdi, der repræsenterer nøjagtigheden af ​​det aktuelle match, betyder den lavere værdi et bedre match.
  • highlight() hjælpefunktionen returnerer en kopi af teksten med søgetermer omgivet af en specificeret markering, f.eks.søgeterm
  • snippet() vælger et kort fragment af tekst for at maksimere antallet af søgetermer, det indeholder.

For eksempel bruger følgende forespørgsel funktionen highlight() til at dekorere søgetermerne ved hjælp af tagget:

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 denne øvelse har du lært, hvordan du bruger SQLite fuldtekst søgefunktioner via FTS5 virtuelt tabelmodul.


  1. Sådan benchmarker du MySQL &MariaDB's ydeevne ved hjælp af SysBench

  2. Hvordan eksporterer man data som CSV-format fra SQL Server ved hjælp af sqlcmd?

  3. mysql - laver en mekanisme, der ligner Oracles sekvenser

  4. MMO-spil og databasedesign