sql >> Base de Datos >  >> RDS >> PostgreSQL

Búsqueda de texto completo de PostgreSQL y confusión de trigramas

Sirven para propósitos muy diferentes.

  • La búsqueda de texto completo se utiliza para devolver documentos que coinciden con una consulta de búsqueda de palabras derivadas.
  • Los trigramas le brindan un método para comparar dos cadenas y determinar qué tan similares se ven.

Considere los siguientes ejemplos:

SELECT 'cat' % 'cats'; --true

Lo anterior devuelve verdadero porque 'cat' es bastante similar a 'cats' (según lo dictado por el límite pg_trgm).

SELECT 'there is a cat with a dog' % 'cats'; --false

Lo anterior devuelve false porque % busca similitudes entre las dos cadenas completas, no busca la palabra cats dentro la cuerda.

SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true

Esto devuelve true porque tsvector transformó la cadena en una lista de palabras derivadas e ignoró un montón de palabras comunes (palabras vacías, como 'es' y 'a')... luego buscó la versión derivada de cats .

Parece que quieres usar trigramas para corregir automáticamente su ts_query pero eso no es realmente posible (no de ninguna manera eficiente de todos modos). Realmente no saben una palabra está mal escrita, cuán similar podría ser a otra palabra. Ellos podrían se puede usar para buscar en una tabla de palabras para tratar de encontrar palabras similares, lo que le permite implementar una función de tipo "¿quiso decir...", pero esta palabra requiere mantener una tabla separada que contenga todas las palabras utilizadas en su búsqueda de search campo.

Si tiene algunas palabras/frases comúnmente mal escritas que desea que coincidan con el índice de texto, puede consultar los diccionarios de sinónimos