Vous venez de découvrir deux approches différentes de la recherche dans un ensemble de documents, chacune présentant des avantages particuliers. Si l'une de ces méthodes répond à vos besoins, vous n'avez besoin de rien d'autre, mais dans de nombreux cas, chaque méthode de recherche donne des résultats précieux que l'autre méthode ne permettrait pas d'obtenir, de sorte que la meilleure option consiste à proposer un ensemble de résultats combinés.
Pour ces cas, Elasticsearch propose Reciprocal Rank Fusion, un algorithme qui combine les résultats de deux listes ou plus en une seule liste.
Comment fonctionne le FRR
Elasticsearch intègre l'algorithme RRF dans la requête de recherche. Prenons l'exemple suivant, qui comporte les sections query et knn pour demander respectivement des recherches en texte intégral et des recherches vectorielles, ainsi qu'une section rrf qui les combine en une seule liste de résultats.
Bien que RRF fonctionne assez bien pour de courtes listes de résultats sans aucune configuration, certains paramètres peuvent être réglés pour obtenir les meilleurs résultats. Consultez la documentation pour en savoir plus à ce sujet.
Mise en œuvre du FRR
Pour permettre une recherche combinée qui renvoie les résultats des méthodes de recherche en texte intégral et de recherche vectorielle, la logique de recherche en texte intégral utilisée précédemment dans la fonction handle_search() doit être rétablie. Pour mettre en œuvre une stratégie de recherche hybride, la méthode search() doit recevoir les arguments query et knn, chacun demandant une requête distincte. La section rank, comme indiqué ci-dessus, est également ajoutée pour combiner les résultats en une seule liste classée.
Voici la version de handle_search() qui met en œuvre la stratégie de recherche hybride :
Dans cette version, les meilleurs résultats de chaque méthode de recherche sont combinés. Cliquez ici pour consulter la demande complète avec ces changements.
Suivant
Recherche sémantique