Capacidades/limites de pesquisa de texto completo do banco de dados?

Continuando a discussão de Os resultados da busca devem priorizar a primeira postagem no tópico quando o título corresponde ao termo de busca:

Isso está muito fora do tópico (OT) para a discussão original, mas não tenho certeza se devo ficar apenas surpreso ou chocado:

(Ênfase minha)

Não vou contestar escolhas de banco de dados, já que não tenho nenhuma experiência nessa área, mas essa afirmação sugere que o PostgreSQL não diferencia internamente esses casos. Esse tipo de limitação é comum em mecanismos de busca de texto de bancos de dados? Se for, isso explicaria muito por que a maioria das ferramentas de busca de sites é completamente inútil…

Deixe-me esclarecer essa afirmação. Para correspondências exatas, não há necessidade de ranquear os resultados, pois ou há uma correspondência ou não há. Para correspondências parciais, como decidiremos quais devem ter ranqueamento mais alto?

  1. Este é o meu termo de busca
  2. Termo de busca é interessante
  3. Termo de busca é mais interessante aqui, já que o título é mais longo

Todos os títulos acima contêm o termo de busca, então a questão é: como ranquear os resultados? Atualmente, confiamos na função de ranqueamento do Postgres para determinar isso para nós.

Tentativas de ranqueamento buscam medir o quão relevantes os documentos são para uma consulta específica, para que, quando houver muitas correspondências, as mais relevantes possam ser exibidas primeiro. O PostgreSQL fornece duas funções de ranqueamento pré-definidas, que levam em conta informações lexicais, de proximidade e estruturais; ou seja, elas consideram com que frequência os termos da consulta aparecem no documento, quão próximos estão no documento e quão importante é a parte do documento onde ocorrem. No entanto, o conceito de relevância é vago e muito específico da aplicação. Diferentes aplicações podem exigir informações adicionais para o ranqueamento, como, por exemplo, a data de modificação do documento. As funções de ranqueamento integradas são apenas exemplos. Você pode escrever suas próprias funções de ranqueamento e/ou combinar seus resultados com fatores adicionais para atender às suas necessidades específicas.

Há vários fatores que o Postgres leva em consideração, mas, no final das contas, o ranqueamento ainda é um tanto vago e realmente depende de site para site, dependendo de como o conteúdo do fórum está estruturado. Nosso objetivo aqui no Discourse é fornecer um bom padrão que funcione para a maioria dos fóruns por aí.

Ahh… Então, provavelmente houve algum mal-entendido da minha parte. Eu pensei que você quisesse dizer que o banco de dados não conseguia diferenciar entre uma correspondência exata e uma correspondência do tipo ‘contém’.

No contexto de priorizar correspondências nos títulos dos tópicos, como estávamos discutindo originalmente:

  • Na verdade, eu classificaria todos os seus três exemplos como “Correspondências exatas” para o propósito da minha intenção.
  • “Há um termo que você pode Procurar” seria uma correspondência do tipo “contém”.

  • Seus três exemplos têm a mesma classificação. Basta listá-los na ordem em que são encontrados.
  • Meu exemplo fica abaixo deles.
  • Todos eles, no entanto, têm classificação superior a qualquer postagem que seja correspondente/relevante apenas devido ao conteúdo da postagem sem o título.

Se você estiver preocupado com o fato de os principais resultados de pesquisa ficarem inundados com correspondências de “Título”, use a pesquisa por título apenas quando o termo de pesquisa atingir um nível mínimo de complexidade. O alvo é ter, no máximo, 4 ou 5 correspondências de “Título” no topo dos resultados de pesquisa. (Embora eu veja que isso provavelmente seria difícil de determinar)