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

Guida introduttiva alla ricerca full-text di SQLite

Riepilogo :in questo tutorial imparerai come utilizzare la funzione di ricerca full-text di SQLite utilizzando il modulo tabella virtuale FTS5.

Introduzione alla ricerca full-text di SQLite

Una tabella virtuale è un'estensione personalizzata di SQLite. Un tavolo virtuale è come un tavolo normale. La differenza tra una tabella virtuale e una tabella normale è da dove provengono i dati, ad esempio, quando si elabora una tabella normale, SQLite accede al file di database per recuperare i dati. Tuttavia, quando accedi a una tabella virtuale, SQLite chiama il codice personalizzato per ottenere i dati. Il codice personalizzato può avere una logica specificata per gestire determinate attività come l'acquisizione di dati da più origini dati.

Per utilizzare la ricerca full-text in SQLite, utilizzi il modulo tabella virtuale FTS5.

Il seguente CREATE VIRTUAL TABLE istruzione crea una tabella FTS5 con due colonne:

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

Nota che non puoi aggiungere tipi, vincoli o PRIMARY KEY dichiarazione nella CREATE VIRTUAL TABLE istruzione per la creazione di una tabella FTS5. In tal caso, SQLite emetterà un errore.

Come creare una tabella normale senza specificare la colonna della chiave primaria, SQLite aggiunge un rowid implicito colonna alla tabella FTS5.

L'esempio seguente crea una tabella FTS5 denominata posts con due colonne title e body .

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

Simile a una normale tabella, puoi inserire dati nei posts tabella come segue:

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)

E interroga i dati su di esso:

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

Interrogazione dei dati utilizzando la ricerca full-text

Puoi eseguire una query full-text su una tabella FTS5 utilizzando uno di questi tre modi.

Per prima cosa, usa un MATCH operatore nella clausola WHERE dell'istruzione SELECT. Ad esempio, per ottenere tutte le righe che hanno il termine fts5 , utilizzi la seguente query:

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

In secondo luogo, usa un uguale (= ) nell'operatore WHERE clausola del SELECT dichiarazione. L'istruzione seguente restituisce lo stesso risultato dell'istruzione precedente:

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

In terzo luogo, utilizzare una sintassi della funzione con valori di tabella. In questo modo, utilizzerai il termine di ricerca come primo argomento della tabella:

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

Per impostazione predefinita, FTS5 è indipendente dal caso. Tratta i termini fts5 FTS5 e Fts5 lo stesso.

Per ordinare i risultati della ricerca dal più al meno pertinente, utilizza la clausola ORDER BY come segue:

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

Utilizzo della sintassi delle query full-text

Una query di ricerca full-text è composta da frasi, in cui ogni frase è un elenco ordinato di uno o più token. Puoi usare l'operatore “+” per concatenare due frasi come nell'esempio seguente:

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

FTS5 determina se un documento corrisponde a una frase se il documento contiene almeno una sottosequenza di token che corrispondono alla sequenza di token utilizzata per costruire la frase.

La query seguente restituisce tutti i documenti che corrispondono al termine di ricerca Learn SQLite :

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

Ricerche di prefissi

È possibile utilizzare l'asterisco (*) come token di prefisso. Quando una frase contiene l'asterisco (*), corrisponderà a qualsiasi documento che contiene il token che inizia con la frase. Ad esempio, ricerca* corrisponde a ricerca, ricerca, ricerche, ecc. Vedere il seguente esempio:

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

Operatori booleani

Puoi utilizzare l'operatore booleano, ad esempio NOT , OR o AND per combinare le query.

  • q1 AND q2:corrisponde se entrambe le query q1 e q2 corrispondono.
  • q1 OR q2:corrisponde se la query q1 o q2 corrisponde.
  • q1 NOT q2:corrisponde se la query q1 corrisponde e q2 non corrisponde.

Ad esempio, per ottenere i documenti che corrispondono a learn frase ma non corrisponde a FTS5 frase, usi il NOT operatore come segue:

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

Per cercare documenti che corrispondono a una delle due frasi learn o text , usi il OR operatore come il seguente esempio:

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

Per trovare i documenti che corrispondono a SQLite e alla ricerca, usa AND operatore come mostrato di seguito:

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

Per modificare la precedenza dell'operatore, utilizzare le parentesi per raggruppare le espressioni. Ad esempio:

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

L'istruzione restituisce documenti che corrispondono a search e sqlite o help . Per trovare i documenti che corrispondono a search e sqlite o help , usi la parentesi come segue:

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

Funzioni ausiliarie integrate

SQLite fornisce tre funzioni ausiliarie integrate che possono essere utilizzate all'interno di query full-text sulla tabella FTS5.

  • Il bm25() restituisce un valore che rappresenta l'accuratezza della corrispondenza corrente, il valore più basso indica una corrispondenza migliore.
  • Il highlight() la funzione ausiliaria restituisce una copia del testo con i termini di ricerca circondati da un markup specificato, ad es.termine di ricerca
  • Il snippet() seleziona un breve frammento di testo per massimizzare il numero di termini di ricerca che contiene.

Ad esempio, la query seguente utilizza la funzione highlight() per decorare i termini di ricerca utilizzando il tag:

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 questo tutorial, hai imparato come utilizzare le funzionalità di ricerca full-text di SQLite tramite il modulo tabella virtuale FTS5.