Firebase SQL Connect admite la búsqueda en el texto completo, con tecnología de PostgreSQL. La búsqueda en el texto completo te permite ubicar información de forma rápida y eficiente en conjuntos de datos grandes buscando palabras clave y frases en varias columnas a la vez.
Puedes agregar la búsqueda en el texto completo a tu servicio. Primero, agrega la directiva @searchable a la String de tu esquema en la que deseas buscar. Por ejemplo:
type Movie
@table {
# The fields you want to search over
title: String! @searchable
genre: String @searchable
description: String @searchable
tags: [String]
# Some other fields that we won't search over
rating: Float
imageUrl: String!
releaseYear: Int
}
Una vez que agregues esta directiva, podrás realizar una búsqueda en el texto completo agregando
el <pluralType>_search campo a una consulta. En este caso, será movies_search:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
imageUrl
releaseYear
genre
rating
tags
description
}
}
Cómo ajustar los resultados de la búsqueda en el texto completo
Puedes ajustar los resultados de la búsqueda en el texto completo agregando argumentos a la directiva @searchable y al campo _search;
Argumentos compartidos
Puedes controlar los resultados de la búsqueda con muchos de los mismos argumentos que se usan para los campos de lista básicos
<pluralType>:
orderte permite cambiar el orden de los resultados. Si se omite, los resultados se ordenarán por relevancia descendente.wherete permite agregar filtros adicionales a la búsqueda (p.ej., buscar solo películas de un género específico).limithace que la consulta solo muestre los X resultados principales.offsethace que la consulta omita los primeros X resultados.distinctagrega el operador DISTINCT al SQL generado.
Elección de idioma
De forma predeterminada, la búsqueda en el texto completo analiza documentos en inglés. Puedes cambiar esto con el argumento de idioma en la directiva @searchable:
type Movie
@table {
title: String! @searchable(language: "french")
...
}
Si especificas el idioma correcto, PostgreSQL realizará un stemming léxico preciso y te ayudará a asegurarte de que tu búsqueda no omita resultados relevantes. Si buscas en varias columnas, todas deben configurarse en el mismo idioma.
| Idiomas | ||
|---|---|---|
|
|
|
Con psql, puedes obtener la lista completa con la siguiente consulta.
SELECT cfgname FROM pg_ts_config;
Formato de consulta
De forma predeterminada, la búsqueda en el texto completo usa semántica web para las consultas (similar a la Búsqueda de Google). Puedes cambiar este comportamiento con el queryFormat argumento en el
<pluralType>_search campo.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Existen cuatro opciones para el formato de consulta:
- QUERY proporciona semántica familiar a los motores de búsqueda web (p.ej., cadenas entre comillas, AND y OR). Es la opción predeterminada.
- PLAIN coincide con todas las palabras, pero no necesariamente juntas ("brown dog" coincidirá con "the brown and white dog" o "the white and brown dog").
- PHRASE coincide con una frase exacta ("brown dog" coincidirá con "the white and brown dog", pero no con "brown and white dog").
- AVANZADO te permite crear consultas complejas con el conjunto completo de operadores tsquery.
Umbral de relevancia
Establecer un umbral de relevancia significa que tu búsqueda solo mostrará resultados por encima de un cierto valor de relevancia. En muchos casos, no necesitarás establecerlo. Cualquier resultado que tenga una relevancia superior a 0 será un resultado pertinente.
Sin embargo, si descubres que tu búsqueda muestra resultados que no parecen pertinentes, el umbral de relevancia puede filtrarlos por ti.
Para determinar un valor adecuado para el umbral de relevancia, debes realizar algunas búsquedas de prueba y observar el _metadata.relevance:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query) {
id
title
_metadata {
relevance
}
...
}
}
Elige un umbral que omita los resultados que consideres irrelevantes. Para ello, deberás hacer lo siguiente:
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, relevanceThreshold: 0.05) {
id
title
...
}
}
Cómo elegir entre la búsqueda de texto completo, la búsqueda de similitud de vectores y los filtros de patrones de cadenas
SQL Connect ofrece varias formas diferentes de buscar en tu base de datos.
Usa esta tabla para elegir la opción adecuada para tu caso de uso.
| Búsqueda en el texto completo | Búsqueda de similitud de vectores | Filtros de patrones de cadenas |
|---|---|---|
| Es adecuada para implementar la funcionalidad de búsqueda general. | Es adecuada para encontrar filas semánticamente similares (por ejemplo, recomendaciones o "Más contenido como este"). | Es adecuada para coincidencias de texto exactas o búsquedas de expresiones regulares. |
| Realiza un stemming léxico, lo que ayuda a hacer coincidir diferentes formas o tiempos del mismo verbo. | Requiere Vertex AI. | Usa la menor cantidad de memoria y espacio en el disco, ya que no requiere ningún índice ni columna generada. |
| Se puede realizar en varias columnas de una tabla. | Solo funciona para una sola columna a la vez. | Se puede realizar en varias columnas de una tabla con filtros OR . |
| Tiene un buen rendimiento en documentos más grandes. | Tiene un buen rendimiento en documentos grandes. | Tiene un rendimiento más bajo cuando se buscan documentos más grandes. |
| Agrega sobrecarga de memoria y almacenamiento para almacenar una columna generada y un índice para cada búsqueda. |