sql >> Databáze >  >> RDS >> SQLite

Začínáme s fulltextovým vyhledáváním SQLite

Shrnutí :v tomto tutoriálu se naučíte používat funkci fulltextového vyhledávání SQLite pomocí modulu virtuální tabulky FTS5.

Úvod do fulltextového vyhledávání SQLite

Virtuální tabulka je vlastní rozšíření SQLite. Virtuální stůl je jako normální stůl. Rozdíl mezi virtuální tabulkou a normální tabulkou je v tom, odkud data pocházejí, tj. když zpracováváte normální tabulku, SQLite přistupuje k databázovému souboru, aby načetl data. Když však přistoupíte k virtuální tabulce, SQLite zavolá vlastní kód, aby získala data. Vlastní kód může mít specifikovanou logiku pro zpracování určitých úkolů, jako je získávání dat z více zdrojů dat.

Chcete-li použít fulltextové vyhledávání v SQLite, použijte modul virtuální tabulky FTS5.

Následující CREATE VIRTUAL TABLE příkaz vytvoří tabulku FTS5 se dvěma sloupci:

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

Všimněte si, že nemůžete přidávat typy, omezení nebo PRIMARY KEY deklarace v CREATE VIRTUAL TABLE příkaz pro vytvoření tabulky FTS5. Pokud tak učiníte, SQLite vydá chybu.

Stejně jako při vytváření normální tabulky bez určení sloupce primárního klíče přidává SQLite implicitní rowid sloupec do tabulky FTS5.

Následující příklad vytvoří tabulku FTS5 s názvem posts se dvěma sloupci title a body .

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

Podobně jako u běžné tabulky můžete vkládat data do posts tabulka takto:

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)

A dotazujte se na data:

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

Dotazování dat pomocí fulltextového vyhledávání

Fulltextový dotaz na tabulku FTS5 můžete provést jedním z těchto tří způsobů.

Nejprve použijte MATCH operátor v klauzuli WHERE příkazu SELECT. Chcete-li například získat všechny řádky, které obsahují výraz fts5 , použijete následující dotaz:

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

Za druhé, použijte rovno (= ) v operátoru WHERE klauzule SELECT prohlášení. Následující příkaz vrátí stejný výsledek jako výše uvedený příkaz:

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

Za třetí, použijte syntaxi funkce s tabulkovou hodnotou. Tímto způsobem použijete hledaný výraz jako první argument tabulky:

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

Ve výchozím nastavení je FTS5 nezávislý na velikosti písmen. Zachází s výrazy fts5 FTS5 a Fts5 totéž.

Chcete-li seřadit výsledky vyhledávání od nejvíce relevantních po nejméně relevantní, použijte klauzuli ORDER BY takto:

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

Použití syntaxe fulltextového dotazu

Dotaz fulltextového vyhledávání se skládá z frází, kde každá fráze je uspořádaný seznam jednoho nebo více tokenů. Operátor „+“ můžete použít ke zřetězení dvou frází jako v následujícím příkladu:

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

FTS5 určuje, zda dokument odpovídá frázi, pokud dokument obsahuje alespoň jednu podsekvenci tokenů, které odpovídají sekvenci tokenů použitých k vytvoření fráze.

Následující dotaz vrátí všechny dokumenty, které odpovídají hledanému výrazu Learn SQLite :

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

Hledání předpon

Jako předponu můžete použít hvězdičku (*). Pokud fráze obsahuje hvězdičku (*), bude se shodovat s jakýmkoli dokumentem obsahujícím token začínající frází. Například hledání* odpovídá hledání, hledání, hledání atd. Viz následující příklad:

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

Booleovské operátory

Můžete použít booleovský operátor, např. NOT , OR , nebo AND kombinovat dotazy.

  • q1 AND q2:odpovídá, pokud se oba dotazy q1 a q2 shodují.
  • q1 NEBO q2:odpovídá, pokud se shoduje dotaz q1 nebo q2.
  • q1 NOT q2:odpovídá, pokud se dotaz q1 shoduje a q2 neodpovídá.

Chcete-li například získat dokumenty, které odpovídají learn frázi, ale neodpovídá FTS5 frázi, použijete NOT operátor takto:

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

Chcete-li vyhledat dokumenty, které odpovídají jedné z frází learn nebo text , použijete OR operátor jako následující příklad:

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

Chcete-li najít dokumenty, které odpovídají jak SQLite, tak vyhledávání, použijte AND operátor, jak je uvedeno níže:

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

Chcete-li změnit prioritu operátorů, použijte k seskupení výrazů závorky. Například:

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

Příkaz vrátí dokumenty, které odpovídají search a sqlite nebo help . Chcete-li najít dokumenty, které odpovídají search a buď sqlite nebo help , použijete závorky následovně:

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

Vestavěné pomocné funkce

SQLite poskytuje tři vestavěné pomocné funkce, které lze použít v rámci fulltextových dotazů na tabulku FTS5.

  • bm25() vrátí hodnotu, která představuje přesnost aktuální shody, nižší hodnota znamená lepší shodu.
  • highlight() pomocná funkce vrací kopii textu s hledanými výrazy obklopenými zadaným označením, např.hledaný výraz
  • snippet() vybere krátký fragment textu, aby se maximalizoval počet hledaných výrazů, které obsahuje.

Například následující dotaz používá funkci highlight() ke zdobení hledaných výrazů pomocí 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)

V tomto tutoriálu jste se naučili používat funkce fulltextového vyhledávání SQLite prostřednictvím modulu virtuální tabulky FTS5.


  1. Použijte FILE_IDEX() k vrácení ID databázového souboru na serveru SQL Server

  2. Použití RStudio s nesystémovou verzí unixODBC Driver Manager

  3. Jak změnit strukturu tabulky v Oracle?

  4. Jak LN() funguje v MariaDB