SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Pierwsze kroki z wyszukiwaniem pełnotekstowym SQLite

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 termin
  • snippet() 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android:Jak zaimportować kontakt z telefonu?

  2. 6 sposobów na wybranie zduplikowanych wierszy w SQLite

  3. Przechowywanie konfiguracji w Androidzie

  4. Utwórz kolumnę automatycznego przyrostu w SQLite

  5. Zastrzeżenia dotyczące Pythona i SQLite