SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

Introdução à pesquisa de texto completo do SQLite


Resumo :neste tutorial, você aprenderá a usar o recurso de pesquisa de texto completo do SQLite usando o módulo de tabela virtual FTS5.

Introdução à pesquisa de texto completo SQLite


Uma tabela virtual é uma extensão personalizada do SQLite. Uma mesa virtual é como uma mesa normal. A diferença entre uma tabela virtual e uma tabela normal é de onde vêm os dados, ou seja, quando você processa uma tabela normal, o SQLite acessa o arquivo do banco de dados para recuperar os dados. No entanto, quando você acessa uma tabela virtual, o SQLite chama o código personalizado para obter os dados. O código personalizado pode ter uma lógica especificada para lidar com determinadas tarefas, como obter dados de várias fontes de dados.

Para usar a pesquisa de texto completo no SQLite, você usa o módulo de tabela virtual FTS5.

O seguinte CREATE VIRTUAL TABLE declaração cria uma tabela FTS5 com duas colunas:
CREATE VIRTUAL TABLE table_name 
USING FTS5(column1,column2...);
Code language: SQL (Structured Query Language) (sql)

Observe que você não pode adicionar tipos, restrições ou PRIMARY KEY declaração no CREATE VIRTUAL TABLE instrução para criar uma tabela FTS5. Se você fizer isso, o SQLite emitirá um erro.

Como criar uma tabela normal sem especificar a coluna de chave primária, o SQLite adiciona um rowid implícito coluna para a tabela FTS5.

O exemplo a seguir cria uma tabela FTS5 chamada posts com duas colunas title e body .
CREATE VIRTUAL TABLE posts 
USING FTS5(title, body);
Code language: SQL (Structured Query Language) (sql)

Semelhante a uma tabela normal, você pode inserir dados nas posts tabela da seguinte forma:
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)

E consulte os dados nele:
SELECT * FROM posts;
Code language: SQL (Structured Query Language) (sql)

Consultando dados usando pesquisa de texto completo


Você pode executar uma consulta de texto completo em uma tabela FTS5 usando uma dessas três maneiras.

Primeiro, use um MATCH operador na cláusula WHERE da instrução SELECT. Por exemplo, para obter todas as linhas que possuem o termo fts5 , você usa a seguinte consulta:
SELECT * 
FROM posts 
WHERE posts MATCH 'fts5';
Code language: SQL (Structured Query Language) (sql)

Segundo, use um igual (= ) no operador WHERE cláusula do SELECT demonstração. A instrução a seguir retorna o mesmo resultado da instrução acima:
SELECT * 
FROM posts 
WHERE posts = 'fts5';
Code language: SQL (Structured Query Language) (sql)

Terceiro, use uma sintaxe de função de valor tabelado. Dessa forma, você usa o termo de pesquisa como o primeiro argumento da tabela:
SELECT * 
FROM posts('fts5');
Code language: SQL (Structured Query Language) (sql)

Por padrão, o FTS5 é independente de maiúsculas e minúsculas. Ele trata os termos fts5 FTS5 e Fts5 o mesmo.

Para classificar os resultados da pesquisa do mais para o menos relevante, use a cláusula ORDER BY da seguinte maneira:
SELECT * 
FROM posts 
WHERE posts MATCH 'text' 
ORDER BY rank;
Code language: SQL (Structured Query Language) (sql)

Usando sintaxe de consulta de texto completo


Uma consulta de pesquisa de texto completo é composta de frases, em que cada frase é uma lista ordenada de um ou mais tokens. Você pode usar o operador “+” para concatenar duas frases como no exemplo a seguir:
"learn SQLite"
"learn + SQLite"
Code language: SQL (Structured Query Language) (sql)

O FTS5 determina se um documento corresponde a uma frase se o documento contiver pelo menos uma subsequência de tokens que corresponda à sequência de tokens usada para construir a frase.

A consulta a seguir retorna todos os documentos que correspondem ao termo de pesquisa Learn SQLite :
SELECT * 
FROM posts 
WHERE posts MATCH 'learn SQLite';
Code language: SQL (Structured Query Language) (sql)

Pesquisas de prefixo


Você pode usar o asterisco (*) como um token de prefixo. Quando uma frase contém o asterisco (*), ela corresponderá a qualquer documento que contenha o token que começa com a frase. Por exemplo, search* corresponde a search, search, searchs etc. Veja o exemplo a seguir:
SELECT * 
FROM posts
WHERE posts = 'search*';Code language: SQL (Structured Query Language) (sql)

Operadores booleanos


Você pode usar o operador booleano, por exemplo, NOT , OR , ou AND para combinar consultas.
  • q1 AND q2:corresponde se as consultas q1 e q2 corresponderem.
  • q1 OR q2:corresponde se a consulta q1 ou q2 corresponder.
  • q1 NOT q2:corresponde se a consulta q1 corresponder e a q2 não corresponder.

Por exemplo, para obter os documentos que correspondem ao learn frase, mas não corresponde ao FTS5 frase, você usa o NOT operador da seguinte forma:
SELECT * 
FROM posts 
WHERE posts MATCH 'learn NOT text';
Code language: SQL (Structured Query Language) (sql)

Para pesquisar documentos que correspondam a uma das frases learn ou text , você usa o OR operador conforme o exemplo a seguir:
SELECT * 
FROM posts 
WHERE posts MATCH 'learn OR text';
Code language: SQL (Structured Query Language) (sql)

Para encontrar os documentos que correspondem ao SQLite e à pesquisa, você usa o AND operador como mostrado abaixo:
SELECT * 
FROM posts 
WHERE posts MATCH 'sqlite AND searching';
Code language: SQL (Structured Query Language) (sql)

Para alterar a precedência do operador, use parênteses para agrupar expressões. Por exemplo:
SELECT * 
FROM posts 
WHERE posts MATCH 'search AND sqlite OR help';
Code language: SQL (Structured Query Language) (sql)

A instrução retorna documentos que correspondem a search e sqlite ou help . Para encontrar os documentos que correspondem a search e sqlite ou help , você usa parênteses da seguinte forma:
SELECT * 
FROM posts 
WHERE posts MATCH 'search AND (sqlite OR help)';
Code language: SQL (Structured Query Language) (sql)

Funções auxiliares incorporadas


O SQLite fornece três funções auxiliares integradas que podem ser usadas em consultas de texto completo na tabela FTS5.
  • O bm25() retorna um valor que representa a precisão da correspondência atual, o valor mais baixo significa uma correspondência melhor.
  • O highlight() função auxiliar retorna uma cópia do texto com termos de pesquisa cercados por uma marcação especificada, por exemplo,termo de pesquisa
  • O snippet() seleciona um pequeno fragmento de texto para maximizar o número de termos de pesquisa que ele contém.

Por exemplo, a consulta a seguir usa a função highlight() para decorar os termos de pesquisa usando a 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)

Neste tutorial, você aprendeu como usar os recursos de pesquisa de texto completo do SQLite por meio do módulo de tabela virtual FTS5.