Capacités/limites de recherche plein texte dans la base de données ?

Suite à la discussion sur Les résultats de recherche doivent donner la priorité au premier message d’un sujet lorsque le titre correspond au terme recherché :

Ceci est vraiment hors sujet par rapport à la discussion initiale, mais je ne sais pas si je dois être simplement surpris ou carrément scandalisé :

(Mise en évidence de ma part)

Je ne vais pas contester les choix de base de données, car je n’ai aucune expérience dans ce domaine, mais cette affirmation implique que PostgreSQL ne fait pas de distinction interne entre ces cas. Ce type de limitation est-il courant parmi les moteurs de recherche de texte des bases de données ? Si tel est le cas, cela expliquerait largement pourquoi la plupart des outils de recherche de sites sont totalement inutiles…

Permettez-moi de clarifier cette affirmation. Pour les correspondances exactes, il n’est pas nécessaire de classer les résultats, car soit il y a une correspondance, soit il n’y en a pas. Pour les correspondances partielles, comment allons-nous décider lesquelles doivent être classées plus haut ?

  1. Ceci est mon terme de recherche
  2. Le terme de recherche est intéressant
  3. Le terme de recherche est plus intéressant ici car le titre est plus long

Tous les titres ci-dessus contiennent le terme de recherche, donc la question est : comment classer les résultats ? Actuellement, nous nous appuyons sur la fonction de classement de Postgres pour le déterminer.

Le classement tente de mesurer la pertinence des documents par rapport à une requête particulière, afin que, lorsqu’il y a de nombreuses correspondances, les plus pertinentes soient affichées en premier. PostgreSQL propose deux fonctions de classement prédéfinies qui prennent en compte des informations lexicales, de proximité et structurelles ; c’est-à-dire qu’elles considèrent la fréquence d’apparition des termes de la requête dans le document, la proximité de ces termes dans le document, et l’importance de la partie du document où ils apparaissent. Cependant, le concept de pertinence est vague et très spécifique à l’application. Différentes applications pourraient nécessiter des informations supplémentaires pour le classement, par exemple la date de modification du document. Les fonctions de classement intégrées ne sont que des exemples. Vous pouvez écrire vos propres fonctions de classement et/ou combiner leurs résultats avec d’autres facteurs pour répondre à vos besoins spécifiques.

Il existe de nombreux facteurs que Postgres prend en compte, mais en fin de compte, le classement reste quelque peu vague et dépend vraiment de site en site, selon la structure du contenu du forum. Notre objectif ici chez Discourse est de fournir une valeur par défaut efficace qui fonctionnera pour la plupart des forums existants.

5 « J'aime »

Ahh… Donc, il y a probablement un malentendu de ma part. Je pensais que vous vouliez dire que la base de données ne pouvait pas faire la différence entre une correspondance exacte et une correspondance partielle.

Dans le contexte de la priorisation des correspondances dans les titres de sujets, comme nous en discutions initialement :

  • Je qualifierais en fait vos trois exemples de « correspondances exactes » pour les besoins de mon intention.
  • « Il y a un terme que vous pouvez rechercher » serait une correspondance « partielle ».

  • Vos trois exemples ont le même classement. Listez-les simplement dans l’ordre où ils sont trouvés.
  • Mon exemple se classe en dessous d’eux.
  • Cependant, ils se classent tous avant tout message qui correspond ou est pertinent uniquement en raison du contenu du message sans le titre.

Si vous craignez que les premiers résultats de recherche soient inondés de correspondances de « titre », n’utilisez la recherche par titre que lorsque le terme de recherche atteint un niveau de complexité minimum. Visez au maximum 4 ou 5 correspondances de « titre » en haut des résultats de recherche. (Bien que je voie que cela serait probablement difficile à déterminer)