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

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í.