PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Pesquisa de texto completo do PostgreSQL e confusão de trigramas


Eles servem a propósitos muito diferentes.
  • A pesquisa de texto completo é usada para retornar documentos que correspondem a uma consulta de pesquisa de palavras derivadas.
  • Os trigramas fornecem um método para comparar duas strings e determinar a semelhança entre elas.

Considere os seguintes exemplos:
SELECT 'cat' % 'cats'; --true

O acima retorna verdadeiro porque 'cat' é bastante semelhante a 'cats' (conforme ditado pelo limite pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false

O acima retorna false porque % está procurando de forma semelhante entre as duas strings inteiras, não procurando a palavra cats dentro a corda.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true

Isso retorna true porque o tsvector transformou a string em uma lista de palavras derivadas e ignorou um monte de palavras comuns (palavras de parada - como 'é' e 'a') ... então procurou a versão derivada de cats .

Parece que você quer usar trigramas para corrigir automaticamente sua ts_query mas isso não é realmente possível (não de forma eficiente de qualquer maneira). Eles realmente não sabem uma palavra está incorreta, quão semelhante pode ser a outra palavra. Eles poderiam ser usado para pesquisar uma tabela de palavras para tentar encontrar palavras semelhantes, permitindo que você implemente um recurso do tipo "você quis dizer...", mas essa palavra requer a manutenção de uma tabela separada contendo todas as palavras usadas em sua pesquisa search campo.

Se você tiver algumas palavras/frases com erros ortográficos comuns que você deseja que o índice de texto corresponda, você pode querer consultar os Dicionários de Sinônimos