Améliorations de la recherche en cours de test sur meta

Récemment, suite à des retours internes, nous avons décidé de prioriser une série d’améliorations de notre algorithme de recherche.

Ces changements ont maintenant été déployés sur tous les sites dans le cadre de Discourse 3.1.0.beta3. Après la mise à jour, votre site commencera automatiquement à réindexer tout votre contenu pour la recherche.

Deux nouveaux paramètres de site font partie de ces changements, mais ils ont été configurés avec des valeurs que nous avons trouvées efficaces lors de nos tests ici sur meta, nous ne nous attendons donc pas à ce que la plupart des sites aient une raison de les modifier.

Prioriser la correspondance exacte du terme dans le titre par rapport à la correspondance partielle

Discourse effectue une recherche par racine + correspondance de préfixe. Cela peut parfois conduire à des résultats très surprenants.

Par exemple : redis devient redi, donc une recherche pour redis peut trouver tous les mots qui commencent par redi, tels que redirect et plus encore.

Un nouveau paramètre de site caché a été ajouté : prioritize_exact_search_title_match, qui est maintenant activé par défaut.

Avant :

Après :

Cela signifie que si vous vous souvenez du titre et que vous le tapez, vous avez beaucoup plus de chances de trouver le titre.

Réduction de la duplication maximale d’index

Notre algorithme de classement classe les publications qui ont plusieurs correspondances pour un terme plus haut que les publications qui ne contiennent le terme qu’une seule fois. Cela signifie que vous pouvez “tricher” dans la recherche en répétant simplement un mot un grand nombre de fois. Plus vous tapez le mot, plus il remonte en haut des résultats de recherche.

Un nouveau paramètre de site caché SiteSetting.max_duplicate_search_index_terms a été ajouté, qui est par défaut à 6.

Une fois appliqué, cela signifie que si vous tapez “sam” 6 fois ou 60 fois dans une publication, elle sera toujours classée de la même manière. Cela met un plafond au bonus que vous pouvez accorder aux résultats.

Ce changement a également un impact positif sur les performances, étant donné que l’index de recherche devient un peu plus petit.

Corrections de bugs divers

Une partie du travail a consisté à examiner des cas de recherche pathologiques.

  • Auparavant, nous réduisions la priorité des sujets fermés, mais nous avions oublié les sujets archivés. Ceci est maintenant corrigé.

  • Auparavant, nous nous appuyions trop sur les correspondances de préfixes pour les recherches de “domaines”. Cela signifie que le mot happy ne trouvait pas https://happy.com car happy devient happi et la correspondance de préfixe échoue. Ceci a été corrigé.

Travaux futurs

  • Nous prévoyons d’expérimenter la recherche “floue” pour la complétion automatique des mentions. (permettre de sauter une lettre par exemple)

  • Nous prévoyons d’étudier la dé-priorisation des termes dupliqués dans les titres. Actuellement, le sujet fermé hello goodbye hello est classé plus haut que le sujet ouvert hello world.

  • PageRank… nous ne prenons actuellement pas en compte le nombre de liens internes entrants lors du classement des résultats. Cela signifie que parfois des sujets incroyablement bien liés peuvent être classés plus bas qu’un sujet rare qui n’est lié nulle part. Il serait souhaitable de prendre cela en compte dans notre algorithme de classement.

  • Nous avons une initiative ouverte examinant les intégrations d’IA, nous pourrions tirer une certaine inspiration d’outils similaires à GPT.

Que pouvez-vous faire pour aider ?

Remarquez-vous des résultats médiocres sur meta ? Si oui, veuillez inclure le terme que vous avez recherché en expliquant pourquoi les résultats sont médiocres.

Comment trouvez-vous les changements (neutres/meilleurs/pires ?)

47 « J'aime »

Juste pour être sûr… Si je mets à jour/améliore ma configuration, trouverai-je ces deux paramètres ? Je sais comment trouver ceux qui sont cachés, ce n’est pas un problème — mais sont-ils réservés à Meta pour le moment ? Pour moi, il est plus facile de le tester sur mes cercles que sur ce site :wink:

7 « J'aime »

Oui, mais vous devez également exécuter rake search:reindex

7 « J'aime »

Avez-vous pensé à améliorer la recherche avec meilisearch ? Cela nécessite très peu de ressources et peut être inclus dans la construction Docker.

5 « J'aime »

7 messages ont été divisées dans un nouveau sujet : Prioriser les sujets fermés ou résolus dans la recherche

Nous avons commencé des expériences dans ce domaine par

Les premières expériences sont limitées à la recherche d’utilisateurs / groupes, mais si tout se passe bien, elles pourront être étendues davantage.

8 « J'aime »

Nous avons envisagé diverses intégrations, notamment sphinx, melli, elastic, solr/lucene, mais elles ont un coût. Héberger un autre processus pour l’indexation, risquer des index obsolètes, la complexité… etc. ne sont pas gratuits.

J’aimerais voir quelle est la performance de PG avant d’explorer d’autres options et de les considérer en dernier recours.

Problème très intéressant, oui, ils sont (et ont toujours été) dépriorisés. Je pense qu’au minimum, nous pouvons envisager d’ajouter un paramètre de site à discourse-solved pour permettre aux administrateurs de décider quoi faire dans ces cas (prioriser/déprioriser/neutre, etc.).

16 « J'aime »

Malheureusement, postgres n’est pas adapté comme moteur de recherche. Et meilisearch a une consommation de mémoire fantastiquement faible et des possibilités de recherche illimitées. La surcharge pour le serveur par rapport à ruby sera tout simplement invisible.

3 « J'aime »

Ce n’est pas un problème trivial. Notre recherche contient d’énormes quantités de dimensions et a beaucoup de paramètres, elle joint directement des tables postgres.

Avec un fournisseur de recherche externe, nous devons nous soucier de la « synchronisation ».

  • Un sujet est fermé sur Discourse → notifier le moteur
  • Un message est supprimé → notifier le moteur
  • Un j’aime est ajouté → notifier le moteur
  • Un sujet est divisé ou fusionné → notifier le moteur

La liste est longue, y compris la création de plusieurs index (utilisateurs/messages/sujets/catégories)

Cela dit, avec le bon investissement, ce n’est pas nécessairement insurmontable, mais c’est une tâche énorme et il n’y a pas de preuve de concept montrant à quel point ce serait mieux. C’est bien que melli ait un classement par rang des fautes de frappe, et de nombreuses autres fonctionnalités, aucun argument là-dessus. Mais l’intégrer n’est pas gratuit du tout.

À titre d’estimation approximative, je pense qu’il y aurait environ 3 mois de travail pour construire une intégration étroite et robuste dans mellisearch. Peut-être même 6 mois si nous concevions Discourse de telle manière que le moteur de recherche soit « enfichable ».

Notez que nous prenons en charge l’intégration d’algolia ici : https://discourse.algolia.com/ ce n’est pas tout à fait solide, et vous pouvez voir que toute la recherche avancée est omise de l’implémentation.

8 « J'aime »

Je suis prêt à parier qu’avec une communauté de discours aussi importante que discourse, cela peut être beaucoup plus rapide, pas plus de trois mois.

2 « J'aime »

Après un certain temps, j’ai demandé à mes utilisateurs les plus actifs ce qu’ils pensaient (pensé :man_facepalming: ) de la recherche — je n’ai jamais dit qu’elle avait reçu des stéroïdes.

Tout le monde a dit exactement la même chose ; ils n’y avaient pas pensé mais parce que je l’ai demandé, ils réalisent qu’ils trouvent maintenant des résultats pertinents beaucoup plus facilement, dans la plupart des cas immédiatement.

Une partie de Discourse agit comme un système de commentaires pour WordPress. Non, je n’ai pas plus de commentaires (rien n’est plus surestimé que les commentaires de blogs) mais cela a montré l’existence (s’écrit-il ainsi ?) du forum. De nos jours, j’ai une poignée d’utilisateurs qui utilisent Discourse comme moteur de recherche. Ils ne commentent pas mais ils recherchent ce qu’ils cherchent sur WordPress via les sujets de Discourse et retournent sur le blog. Bien sûr, le système d’étiquettes aide aussi beaucoup. Et WordPress manque des deux : une recherche efficace et un système d’étiquettes fonctionnel.

Je ne sais pas si je devrais poster ceci dans Praise à la place, mais je voulais juste dire que je suis assez satisfait du fonctionnement de cette nouvelle recherche améliorée.

11 « J'aime »

Wow merci, cela me fait vraiment chaud au cœur ! Nous avons une PR en préparation et nous devrions déployer les changements à l’échelle mondiale très bientôt.

11 « J'aime »

Désolé si je suis obtus — cela devrait-il être actif sur les sites hébergés (avec le dernier déploiement) ? L’annonce de sortie pointe ici, mais cela parle d’un réglage caché — ce réglage caché est-il activé ?

6 « J'aime »

Vous n’avez rien à faire :

Je mettrai à jour le message original avec une note.

9 « J'aime »

Merci pour cette fantastique mise à jour. Pour nous, la possibilité de définir des synonymes de recherche serait une énorme amélioration :pray : Merci.

7 « J'aime »

9 messages ont été déplacées vers un nouveau sujet : Puis-je exclure les noms d’utilisateur de la recherche

Je ne sais pas si c’était un problème auparavant, mais j’ai remarqué que de nombreux messages créés par le système apparaissaient dans les résultats de recherche. C’est peut-être un cas particulier plus visible ici sur meta, mais je ne m’attendrais pas à ce que les messages système soient pertinents pour la recherche.

Exemple de résultat lors de la recherche de termes comme « fermé automatiquement » :

4 « J'aime »

Je ne peux pas reproduire cela ici.

3 « J'aime »

Je peux reproduire cela ; si vous les triez par dernier message au lieu de pertinence, il y a beaucoup de messages système dans les résultats.

4 « J'aime »

Ah, oui, je vois. Ce n’est pas tout, mais c’est plus que raisonnable. Il semble que ces messages devraient être exclus de la recherche.

3 « J'aime »