Firebase Data Connect admite la búsqueda de 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 dentro de grandes conjuntos de datos buscando palabras clave y frases en varias columnas a la vez.
Puedes agregar la búsqueda de texto completo a tu servicio. Primero, agrega la directiva @searchable
al String
en tu esquema en el que deseas realizar la búsqueda. 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 campo <pluralType>_search
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 de 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>
:
order
te permite cambiar el orden de los resultados. Si se omite, los resultados se ordenarán por relevancia en orden descendente.where
te permite agregar filtros adicionales a la búsqueda (p.ej., buscar solo películas de un género específico).limit
hace que la consulta solo muestre los primeros X resultados.offset
hace que la consulta omita los primeros X resultados.distinct
agrega el operador DISTINCT al código SQL generado.
Elección de idioma
De forma predeterminada, la búsqueda en el texto completo analiza los 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 podrá realizar una derivación léxica precisa y garantizar que tu búsqueda no omita resultados relevantes. Si realizas la búsqueda en varias columnas, todas deben estar configuradas en el mismo idioma.
Lenguajes | ||
---|---|---|
|
|
|
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 de texto completo usa la semántica web para las búsquedas (similar a la Búsqueda de Google). Puedes cambiar este comportamiento con el argumento queryFormat
en el campo <pluralType>_search
.
query SearchMovies($query: String) @auth(level: PUBLIC) {
movies_search(query: $query, queryFormat: PHRASE) {
...
}
}
Existen cuatro opciones para el formato de la búsqueda:
- QUERY proporciona una semántica familiar a los motores de búsqueda web (p.ej., cadenas entre comillas, AND y OR). Es el valor predeterminado.
- PLAIN coincide con todas las palabras, pero no necesariamente juntas ("perro marrón" coincidirá con "el perro marrón y blanco" o "el perro blanco y marrón").
- PHRASE coincide con una frase exacta ( "perro marrón" coincidirá con "el perro blanco y marrón", pero no con "perro marrón y blanco").
- AVANZADO te permite crear consultas complejas con el conjunto completo de operadores de tsquery.
Umbral de relevancia
Establecer un umbral de relevancia significa que tu búsqueda solo devolverá resultados por encima de un determinado valor de relevancia. En muchos casos, no será necesario que configures este parámetro, ya que cualquier resultado con una relevancia superior a 0 será pertinente.
Sin embargo, si ves que tu búsqueda devuelve resultados que no te parecen relevantes, 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
Data 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 |
---|---|---|
Ideal para implementar la funcionalidad de búsqueda general | Es útil para encontrar filas semánticamente similares (por ejemplo, recomendaciones o "Más como este"). | Es útil para las coincidencias de texto exactas o las búsquedas de expresiones regulares. |
Realiza la derivación léxica, lo que ayuda a hacer coincidir diferentes formas o tiempos verbales de la misma palabra. | Requiere Vertex AI | Usa la menor cantidad de memoria y espacio en disco, ya que no requiere índices ni columnas generadas. |
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. |
Rendimiento en documentos más grandes | Rendimiento en documentos grandes | Menos rendimiento 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. |