SQLite
 sql >> база данни >  >> RDS >> SQLite

Първи стъпки с пълнотекстово търсене на SQLite

Резюме :в този урок ще научите как да използвате функцията за пълнотекстово търсене на SQLite, като използвате модула за виртуална таблица FTS5.

Въведение в пълнотекстово търсене на SQLite

Виртуалната таблица е персонализирано разширение към SQLite. Виртуалната маса е като нормална маса. Разликата между виртуална таблица и нормална таблица е откъде идват данните, т.е., когато обработвате нормална таблица, SQLite осъществява достъп до файла на базата данни, за да извлече данни. Въпреки това, когато имате достъп до виртуална таблица, SQLite извиква персонализирания код, за да получи данните. Персонализираният код може да има определена логика за обработка на определени задачи, като например получаване на данни от множество източници на данни.

За да използвате пълнотекстово търсене в SQLite, използвате модул за виртуална таблица FTS5.

Следният CREATE VIRTUAL TABLE оператор създава FTS5 таблица с две колони:

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

Забележете, че не можете да добавяте типове, ограничения или PRIMARY KEY декларация в CREATE VIRTUAL TABLE изявление за създаване на таблица FTS5. Ако го направите, SQLite ще издаде грешка.

Подобно на създаването на нормална таблица, без да се посочва колоната с първичен ключ, SQLite добавя имплицитен rowid колона към таблицата FTS5.

Следващият пример създава FTS5 таблица с име posts с две колони title и body .

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

Подобно на нормална таблица, можете да вмъквате данни в posts таблица, както следва:

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)

И потърсете данни срещу него:

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

Запитване на данни чрез пълнотекстово търсене

Можете да изпълните заявка за пълен текст срещу FTS5 таблица, като използвате един от тези три начина.

Първо, използвайте MATCH оператор в клаузата WHERE на израза SELECT. Например, за да получите всички редове, които имат термина fts5 , използвате следната заявка:

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

Второ, използвайте равен (= ) оператор в WHERE клауза на SELECT изявление. Следното изявление връща същия резултат като изявлението по-горе:

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

Трето, използвайте синтаксис на функцията с таблична стойност. По този начин използвате думата за търсене като първи аргумент на таблицата:

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

По подразбиране FTS5 не зависи от регистъра. Той третира термините fts5 FTS5 и Fts5 същото.

За да сортирате резултатите от търсенето от най-уместните към най-малко подходящи, използвате клаузата ORDER BY, както следва:

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

Използване на синтаксис на заявка за пълен текст

Пълнотекстова заявка за търсене се състои от фрази, където всяка фраза е подреден списък от един или повече символи. Можете да използвате оператора „+“, за да свържете две фрази като следния пример:

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

FTS5 определя дали даден документ съвпада с фраза, ако документът съдържа поне една подпоредица от токени, които съответстват на последователността от токени, използвани за конструиране на фразата.

Следната заявка връща всички документи, които съответстват на думата за търсене Learn SQLite :

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

Търсене на префикс

Можете да използвате звездичката (*) като маркер за префикс. Когато фраза съдържа звездичката (*), тя ще съответства на всеки документ, който съдържа токена, който започва с фразата. Например, search* съвпада с търсене, търсене, търсения и т.н. Вижте следния пример:

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

Булеви оператори

Можете да използвате булевия оператор, например NOT , OR , или AND за комбиниране на заявки.

  • q1 И q2:съвпада, ако и двете заявки q1 и q2 съвпадат.
  • q1 ИЛИ q2:съвпада, ако една заявка q1 или q2 съвпада.
  • q1 НЕ q2:съвпада, ако заявката q1 съвпада и q2 не съвпада.

Например, за да получите документите, които съответстват на learn фраза, но не съответства на FTS5 фраза, използвате NOT оператор, както следва:

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

За да търсите документи, които съответстват на някоя от фразата learn или text , използвате OR оператор като следния пример:

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

За да намерите документите, които съответстват както на SQLite, така и на търсене, използвате AND оператор, както е показано по-долу:

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

За да промените приоритета на оператора, използвате скоби за групиране на изрази. Например:

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

Инструкцията връща документи, които отговарят на search и sqlite или help . За да намерите документите, които отговарят на search и sqlite или help , използвате скоби, както следва:

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

Вградени помощни функции

SQLite предоставя три вградени спомагателни функции, които могат да се използват в рамките на пълнотекстови заявки в таблицата FTS5.

  • bm25() връща стойност, която представлява точността на текущото съвпадение, по-ниската стойност означава по-добро съвпадение.
  • highlight() спомагателната функция връща копие на текста с думи за търсене, заобиколени от определена маркировка, напр.търсенна дума
  • snippet() избира кратък фрагмент от текст, за да увеличи максимално броя на думите за търсене, които съдържа.

Например следната заявка използва функцията highlight(), за да украси думите за търсене с помощта на тага:

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)

В този урок научихте как да използвате функциите за пълнотекстово търсене на SQLite чрез модула за виртуална таблица 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. listview показва данните от базата данни в android

  2. Сравнете датите, съхранени като низ, като използвате Datetime

  3. 5 начина да проверите типа данни на колона в SQLite

  4. SQLite IN

  5. SQLite Поръчайте по дата 1530019888000