sql >> Base de Datos >  >> RDS >> SQLite

Introducción a la búsqueda de texto completo de SQLite

Resumen :en este tutorial, aprenderá a utilizar la función de búsqueda de texto completo de SQLite utilizando el módulo de tabla virtual FTS5.

Introducción a la búsqueda de texto completo de SQLite

Una tabla virtual es una extensión personalizada de SQLite. Una mesa virtual es como una mesa normal. La diferencia entre una tabla virtual y una tabla normal es de dónde provienen los datos, es decir, cuando procesa una tabla normal, SQLite accede al archivo de la base de datos para recuperar datos. Sin embargo, cuando accede a una tabla virtual, SQLite llama al código personalizado para obtener los datos. El código personalizado puede tener una lógica específica para manejar ciertas tareas, como obtener datos de múltiples fuentes de datos.

Para usar la búsqueda de texto completo en SQLite, use el módulo de tabla virtual FTS5.

Lo siguiente CREATE VIRTUAL TABLE declaración crea una tabla FTS5 con dos columnas:

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

Tenga en cuenta que no puede agregar tipos, restricciones o PRIMARY KEY declaración en CREATE VIRTUAL TABLE instrucción para crear una tabla FTS5. Si lo hace, SQLite emitirá un error.

Al igual que crear una tabla normal sin especificar la columna de clave principal, SQLite agrega un rowid implícito columna a la tabla FTS5.

El siguiente ejemplo crea una tabla FTS5 llamada posts con dos columnas title y body .

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

Similar a una tabla normal, puede insertar datos en las posts tabla de la siguiente manera:

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)

Y consultar datos en su contra:

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

Consulta de datos mediante búsqueda de texto completo

Puede ejecutar una consulta de texto completo en una tabla FTS5 utilizando una de estas tres formas.

Primero, usa un MATCH operador en la cláusula WHERE de la instrucción SELECT. Por ejemplo, para obtener todas las filas que tienen el término fts5 , utiliza la siguiente consulta:

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

En segundo lugar, utilice un igual (= ) operador en el WHERE cláusula del SELECT declaración. La siguiente declaración devuelve el mismo resultado que la declaración anterior:

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

En tercer lugar, utilice una sintaxis de función de valores tabulados. De esta forma, utiliza el término de búsqueda como el primer argumento de la tabla:

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

De forma predeterminada, FTS5 es independiente de mayúsculas y minúsculas. Trata los términos fts5 FTS5 y Fts5 lo mismo.

Para ordenar los resultados de búsqueda de mayor a menor relevancia, utilice la cláusula ORDER BY de la siguiente manera:

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

Uso de la sintaxis de consulta de texto completo

Una consulta de búsqueda de texto completo se compone de frases, donde cada frase es una lista ordenada de uno o más tokens. Puede usar el operador "+" para concatenar dos frases como el siguiente ejemplo:

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

FTS5 determina si un documento coincide con una frase si el documento contiene al menos una subsecuencia de tokens que coinciden con la secuencia de tokens utilizada para construir la frase.

La siguiente consulta devuelve todos los documentos que coinciden con el término de búsqueda Learn SQLite :

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

Búsquedas de prefijos

Puede usar el asterisco (*) como token de prefijo. Cuando una frase contiene el asterisco (*), coincidirá con cualquier documento que contenga el token que comienza con la frase. Por ejemplo, buscar* coincide con búsqueda, búsqueda, búsquedas, etc. Consulte el siguiente ejemplo:

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

Operadores booleanos

Puede usar el operador booleano, por ejemplo, NOT , OR , o AND para combinar consultas.

  • q1 AND q2:coincide si las consultas q1 y q2 coinciden.
  • q1 OR q2:coincide si la consulta q1 o q2 coincide.
  • q1 NO q2:coincide si la consulta q1 coincide y q2 no coincide.

Por ejemplo, para obtener los documentos que coinciden con el learn frase pero no coincide con el FTS5 frase, usas el NOT operador de la siguiente manera:

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

Para buscar documentos que coincidan con cualquiera de las frases learn o text , utiliza el OR operador como el siguiente ejemplo:

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

Para encontrar los documentos que coinciden tanto con SQLite como con la búsqueda, utilice AND operador como se muestra a continuación:

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

Para cambiar la precedencia del operador, use paréntesis para agrupar expresiones. Por ejemplo:

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

La instrucción devuelve documentos que coinciden con search y sqlite o help . Para encontrar los documentos que coinciden con search y sqlite o help , utiliza paréntesis de la siguiente manera:

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

Funciones auxiliares integradas

SQLite proporciona tres funciones auxiliares integradas que se pueden usar en consultas de texto completo en la tabla FTS5.

  • El bm25() devuelve un valor que representa la precisión de la coincidencia actual, el valor más bajo significa una mejor coincidencia.
  • El highlight() la función auxiliar devuelve una copia del texto con los términos de búsqueda rodeados por un marcado específico, por ejemplo, término de búsqueda
  • El snippet() selecciona un fragmento corto de texto para maximizar la cantidad de términos de búsqueda que contiene.

Por ejemplo, la siguiente consulta usa la función de resaltado() para decorar los términos de búsqueda usando la etiqueta:

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)

En este tutorial, ha aprendido a utilizar las funciones de búsqueda de texto completo de SQLite a través del módulo de tabla virtual FTS5.