Podsumowanie :w tym samouczku dowiesz się, jak korzystać z funkcji wyszukiwania pełnotekstowego SQLite przy użyciu modułu wirtualnej tabeli FTS5.
Wprowadzenie do wyszukiwania pełnotekstowego SQLite
Wirtualna tabela to niestandardowe rozszerzenie SQLite. Wirtualny stół jest jak normalny stół. Różnica między wirtualną tabelą a normalną tabelą polega na tym, skąd pochodzą dane, tj. Kiedy przetwarzasz normalną tabelę, SQLite uzyskuje dostęp do pliku bazy danych w celu pobrania danych. Jednak gdy uzyskujesz dostęp do tabeli wirtualnej, SQLite wywołuje niestandardowy kod, aby uzyskać dane. Kod niestandardowy może mieć określoną logikę do obsługi niektórych zadań, takich jak pobieranie danych z wielu źródeł danych.
Aby użyć wyszukiwania pełnotekstowego w SQLite, użyj modułu wirtualnej tabeli FTS5.
Następujące CREATE VIRTUAL TABLE
instrukcja tworzy tabelę FTS5 z dwiema kolumnami:
CREATE VIRTUAL TABLE table_name
USING FTS5(column1,column2...);
Code language: SQL (Structured Query Language) (sql)
Zauważ, że nie możesz dodawać typów, ograniczeń ani PRIMARY KEY
deklaracja w CREATE VIRTUAL TABLE
instrukcja tworzenia tabeli FTS5. Jeśli to zrobisz, SQLite wygeneruje błąd.
Podobnie jak tworzenie normalnej tabeli bez określania kolumny klucza podstawowego, SQLite dodaje niejawny rowid
kolumna do tabeli FTS5.
Poniższy przykład tworzy tabelę FTS5 o nazwie posts
z dwiema kolumnami title
i body
.
CREATE VIRTUAL TABLE posts
USING FTS5(title, body);
Code language: SQL (Structured Query Language) (sql)
Podobnie jak w normalnej tabeli, możesz wstawiać dane do posts
tabela w następujący sposób:
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)
I zapytaj o dane:
SELECT * FROM posts;
Code language: SQL (Structured Query Language) (sql)
Pytania o dane za pomocą wyszukiwania pełnotekstowego
Możesz wykonać zapytanie pełnotekstowe w tabeli FTS5, korzystając z jednego z tych trzech sposobów.
Najpierw użyj MATCH
operator w klauzuli WHERE instrukcji SELECT. Na przykład, aby uzyskać wszystkie wiersze zawierające termin fts5
, używasz następującego zapytania:
SELECT *
FROM posts
WHERE posts MATCH 'fts5';
Code language: SQL (Structured Query Language) (sql)
Po drugie, użyj równości (=
) operator w WHERE
klauzula SELECT
oświadczenie. Poniższa instrukcja zwraca ten sam wynik, co powyższa instrukcja:
SELECT *
FROM posts
WHERE posts = 'fts5';
Code language: SQL (Structured Query Language) (sql)
Po trzecie, użyj składni funkcji wartości w tabeli. W ten sposób użyjesz wyszukiwanego terminu jako pierwszego argumentu tabeli:
SELECT *
FROM posts('fts5');
Code language: SQL (Structured Query Language) (sql)
Domyślnie FTS5 jest niezależny od wielkości liter. Traktuje terminy fts5
FTS5
i Fts5
to samo.
Aby posortować wyniki wyszukiwania od najbardziej do najmniej trafnych, użyj klauzuli ORDER BY w następujący sposób:
SELECT *
FROM posts
WHERE posts MATCH 'text'
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)
Korzystanie ze składni zapytania pełnotekstowego
Pełnotekstowe zapytanie wyszukiwania składa się z fraz, gdzie każda fraza jest uporządkowaną listą jednego lub więcej tokenów. Możesz użyć operatora „+”, aby połączyć dwie frazy, jak w poniższym przykładzie:
"learn SQLite"
"learn + SQLite"
Code language: SQL (Structured Query Language) (sql)
FTS5 określa, czy dokument pasuje do frazy, jeśli dokument zawiera co najmniej jeden podciąg tokenów, który pasuje do sekwencji tokenów użytych do skonstruowania frazy.
Poniższe zapytanie zwraca wszystkie dokumenty pasujące do wyszukiwanego hasła Learn SQLite
:
SELECT *
FROM posts
WHERE posts MATCH 'learn SQLite';
Code language: SQL (Structured Query Language) (sql)
Wyszukiwanie prefiksów
Możesz użyć gwiazdki (*) jako tokena prefiksu. Gdy fraza zawiera gwiazdkę (*), będzie pasować do dowolnego dokumentu zawierającego token rozpoczynający się od frazy. Na przykład wyszukiwanie* pasuje do wyszukiwania, wyszukiwania, wyszukiwania itp. Zobacz następujący przykład:
SELECT *
FROM posts
WHERE posts = 'search*';
Code language: SQL (Structured Query Language) (sql)
Operatory logiczne
Możesz użyć operatora logicznego, np. NOT
, OR
lub AND
do łączenia zapytań.
- q1 AND q2:pasuje, jeśli oba zapytania q1 i q2 są zgodne.
- q1 LUB q2:pasuje, jeśli pasuje zapytanie q1 lub q2.
- q1 NIE q2:pasuje, jeśli zapytanie q1 jest zgodne, a q2 nie jest zgodne.
Na przykład, aby uzyskać dokumenty, które pasują do learn
fraza, ale nie pasuje do FTS5
wyrażenie, używasz NOT
operatora w następujący sposób:
SELECT *
FROM posts
WHERE posts MATCH 'learn NOT text';
Code language: SQL (Structured Query Language) (sql)
Wyszukiwanie dokumentów pasujących do wyrażenia learn
lub text
, użyj OR
operator jako następujący przykład:
SELECT *
FROM posts
WHERE posts MATCH 'learn OR text';
Code language: SQL (Structured Query Language) (sql)
Aby znaleźć dokumenty pasujące zarówno do SQLite, jak i wyszukiwania, użyj AND
operatora, jak pokazano poniżej:
SELECT *
FROM posts
WHERE posts MATCH 'sqlite AND searching';
Code language: SQL (Structured Query Language) (sql)
Aby zmienić pierwszeństwo operatorów, użyj nawiasów do grupowania wyrażeń. Na przykład:
SELECT *
FROM posts
WHERE posts MATCH 'search AND sqlite OR help';
Code language: SQL (Structured Query Language) (sql)
Instrukcja zwraca dokumenty pasujące do search
i sqlite
lub help
. Aby znaleźć dokumenty pasujące do search
i albo sqlite
lub help
, używasz nawiasów w następujący sposób:
SELECT *
FROM posts
WHERE posts MATCH 'search AND (sqlite OR help)';
Code language: SQL (Structured Query Language) (sql)
Wbudowane funkcje pomocnicze
SQLite zapewnia trzy wbudowane funkcje pomocnicze, których można używać w zapytaniach pełnotekstowych w tabeli FTS5.
bm25()
zwraca wartość, która reprezentuje dokładność bieżącego dopasowania, niższa wartość oznacza lepsze dopasowanie.highlight()
funkcja pomocnicza zwraca kopię tekstu z wyszukiwanymi terminami otoczonymi określonym znacznikiem, np. wyszukiwany terminsnippet()
wybiera krótki fragment tekstu, aby zmaksymalizować liczbę zawartych w nim wyszukiwanych haseł.
Na przykład następujące zapytanie używa funkcji highlight() do dekorowania wyszukiwanych haseł za pomocą tagu:
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)
W tym samouczku nauczyłeś się korzystać z funkcji wyszukiwania pełnotekstowego SQLite za pośrednictwem modułu wirtualnej tabeli FTS5.