sql >> Database >  >> RDS >> SQLite

Aan de slag met SQLite Zoeken in volledige tekst

Samenvatting :in deze tutorial leert u hoe u de SQLite full-text zoekfunctie kunt gebruiken met behulp van de FTS5 virtuele tabelmodule.

Inleiding tot SQLite zoeken in volledige tekst

Een virtuele tabel is een aangepaste uitbreiding van SQLite. Een virtuele tafel is als een normale tafel. Het verschil tussen een virtuele tabel en een normale tabel is waar de gegevens vandaan komen, d.w.z. wanneer u een normale tabel verwerkt, gebruikt SQLite het databasebestand om gegevens op te halen. Wanneer u echter een virtuele tabel opent, roept SQLite de aangepaste code aan om de gegevens op te halen. De aangepaste code kan specifieke logica hebben om bepaalde taken uit te voeren, zoals het ophalen van gegevens uit meerdere gegevensbronnen.

Om full-text zoeken in SQLite te gebruiken, gebruikt u de FTS5 virtuele tabelmodule.

De volgende CREATE VIRTUAL TABLE statement maakt een FTS5-tabel met twee kolommen:

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

Merk op dat u geen typen, beperkingen of PRIMARY KEY . kunt toevoegen declaratie in de CREATE VIRTUAL TABLE instructie voor het maken van een FTS5-tabel. Als u dit doet, geeft SQLite een foutmelding.

Net als het maken van een normale tabel zonder de primaire sleutelkolom op te geven, voegt SQLite een impliciete rowid toe kolom naar de FTS5-tabel.

In het volgende voorbeeld wordt een FTS5-tabel gemaakt met de naam posts met twee kolommen title en body .

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

Net als bij een normale tabel, kunt u gegevens invoegen in de posts tabel als volgt:

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)

En er gegevens tegen opvragen:

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

Gegevens opvragen met zoeken in volledige tekst

U kunt op een van deze drie manieren een full-text query uitvoeren op een FTS5-tabel.

Gebruik eerst een MATCH operator in de WHERE-component van de SELECT-instructie. Als u bijvoorbeeld alle rijen wilt ophalen met de term fts5 , gebruik je de volgende zoekopdracht:

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

Ten tweede, gebruik een gelijke (= ) operator in de WHERE clausule van de SELECT uitspraak. De volgende instructie geeft hetzelfde resultaat als de bovenstaande instructie:

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

Gebruik ten derde een functiesyntaxis met tabelwaarde. Op deze manier gebruikt u de zoekterm als het eerste tabelargument:

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

FTS5 is standaard hoofdletteronafhankelijk. Het behandelt de termen fts5 FTS5 en Fts5 hetzelfde.

Om de zoekresultaten te sorteren van meest naar minst relevant, gebruikt u de ORDER BY-clausule als volgt:

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

De syntaxis van volledige-tekstquery's gebruiken

Een zoekopdracht voor volledige tekst bestaat uit zinnen, waarbij elke zin een geordende lijst van een of meer tokens is. U kunt de operator "+" gebruiken om twee zinnen samen te voegen, zoals in het volgende voorbeeld:

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

FTS5 bepaalt of een document overeenkomt met een zin als het document ten minste één subreeks tokens bevat die overeenkomen met de reeks tokens die is gebruikt om de zin te construeren.

De volgende query retourneert alle documenten die overeenkomen met de zoekterm Learn SQLite :

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

Zoeken met prefix

U kunt de asterisk (*) als prefix-token gebruiken. Als een zin de asterisk (*) bevat, komt deze overeen met elk document dat de token bevat die met de zin begint. Zoeken* komt bijvoorbeeld overeen met zoeken, zoeken, zoekopdrachten, enz. Zie het volgende voorbeeld:

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

Booleaanse operatoren

U kunt de Booleaanse operator gebruiken, bijvoorbeeld NOT , OR , of AND om zoekopdrachten te combineren.

  • q1 AND q2:komt overeen als zowel q1- als q2-query's overeenkomen.
  • q1 OR q2:komt overeen als zoekopdracht q1 of q2 overeenkomt.
  • q1 NOT q2:komt overeen als zoekopdracht q1 overeenkomt en q2 niet overeenkomt.

Om bijvoorbeeld de documenten te krijgen die overeenkomen met de learn zin maar komt niet overeen met FTS5 zin, gebruik je de NOT operator als volgt:

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

Om te zoeken naar documenten die overeenkomen met een van beide zinsdelen learn of text , gebruik je de OR operator als het volgende voorbeeld:

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

Om de documenten te vinden die overeenkomen met zowel SQLite als zoeken, gebruik je de AND operator zoals hieronder getoond:

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

Als u de prioriteit van de operator wilt wijzigen, gebruikt u haakjes om uitdrukkingen te groeperen. Bijvoorbeeld:

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

De instructie retourneert documenten die overeenkomen met search en sqlite of help . Om de documenten te vinden die overeenkomen met search en ofwel sqlite of help , gebruik je haakjes als volgt:

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

Ingebouwde hulpfuncties

SQLite biedt drie ingebouwde hulpfuncties die kunnen worden gebruikt in full-text queries op de FTS5-tabel.

  • De bm25() geeft een waarde terug die de nauwkeurigheid van de huidige overeenkomst vertegenwoordigt, de lagere waarde betekent een betere overeenkomst.
  • De highlight() hulpfunctie retourneert een kopie van de tekst met zoektermen omgeven door een gespecificeerde opmaak, bijvoorbeeld zoekterm
  • Het snippet() selecteert een kort tekstfragment om het aantal zoektermen dat het bevat te maximaliseren.

De volgende zoekopdracht gebruikt bijvoorbeeld de functie highlight() om de zoektermen te verfraaien met de 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 deze zelfstudie hebt u geleerd hoe u SQLite-zoekfuncties voor volledige tekst kunt gebruiken via de FTS5-module voor virtuele tabellen.


  1. mysql2 gem gecompileerd voor verkeerde mysql-clientbibliotheek

  2. Hoe unicode op te slaan in MySQL?

  3. Een nieuw databasediagram maken met MySQL Workbench

  4. REGEXP_INSTR() Functie in Oracle