Apercu
La fonctionnalité Rank Fusion de Fess intègre plusieurs résultats de recherche pour fournir des résultats de recherche plus précis.
Qu’est-ce que le Rank Fusion
Le Rank Fusion est une technique qui combine les résultats de plusieurs algorithmes de recherche ou méthodes de notation pour générer un classement unique optimisé.
Principaux avantages :
Combine les forces de différents algorithmes
Améliore la précision de la recherche
Fournit des résultats de recherche diversifiés
Algorithmes pris en charge
Fess prend en charge l’algorithme RRF (Reciprocal Rank Fusion) pour le Rank Fusion.
RRF (Reciprocal Rank Fusion)
RRF calcule un score en additionnant l’inverse du rang de chaque document dans chaque résultat de recherche. Lorsqu’un document est récupéré par plusieurs moteurs de recherche, ses scores sont cumulés.
Formule
k: Paramètre constant qui contrôle l’influence du rang (par défaut : 20)rank(d): Rang du document d dans chaque résultat de recherche (base 0)Σ: Somme sur tous les moteurs de recherche dans lesquels le document d apparaît
Configuration
fess_config.properties
Configuration de base
| Propriété | Défaut | Description |
|---|---|---|
rank.fusion.window_size | 200 | Nombre maximum de résultats récupérés depuis chaque moteur de recherche pour la fusion. Doit être >= paging.search.page.max.size × 2 (200 par défaut) ; si une valeur inférieure est définie, elle est automatiquement relevée à ce minimum. |
rank.fusion.rank_constant | 20 | La constante k dans la formule RRF. Une valeur plus élevée réduit la différence de score entre les résultats mieux et moins bien classés. |
rank.fusion.threads | -1 | Nombre de threads utilisés lors de l’exécution parallèle de plusieurs moteurs de recherche. Si 0 ou moins est spécifié, availableProcessors × 1.5 + 1 est utilisé automatiquement. |
rank.fusion.score_field | rf_score | Nom du champ du document résultat utilisé pour stocker le score fusionné. |
Propriétés système JVM
Les moteurs de recherche à utiliser sont spécifiés en tant que propriété système JVM. Ajoutez la ligne suivante dans fess.in.sh (ou fess.in.bat)
Ce paramètre se comporte comme suit :
Il est défini en tant qu’option JVM, et non dans
fess_config.properties.defaultest le moteur qui effectue la recherche standard par mots-clés ; il est toujours disponible.semanticest le moteur qui effectue la recherche sémantique (vectorielle) ; il est disponible lorsque le plugin Semantic Search (fess-webapp-semantic-search) est installé.Si ce paramètre n’est pas spécifié, tous les moteurs enregistrés sont utilisés. Si aucun des noms spécifiés ne correspond à un moteur enregistré, seul le moteur
defaultest utilisé.La fusion des résultats n’est effectuée que lorsque deux moteurs de recherche ou plus sont disponibles. Lorsqu’un seul moteur est disponible, aucune fusion n’est effectuée et les résultats de recherche normaux sont retournés.
Intégration avec la recherche hybride
Le Rank Fusion est particulièrement efficace pour la recherche hybride, qui combine la recherche par mots-clés et la recherche sémantique. Pour utiliser la recherche sémantique, installez le plugin Semantic Search (fess-webapp-semantic-search) et ajoutez semantic à -Drank.fusion.searchers.
Exemples d’utilisation
Recherche hybride de base
Calculer le score BM25 avec la recherche par mots-clés
Calculer la similarité vectorielle avec la recherche sémantique
Fusionner les deux résultats avec RRF
Générer le classement final
Flux de recherche
Considérations de performance
Utilisation de la mémoire
L’utilisation de la mémoire augmente car plusieurs résultats de recherche sont conservés.
Utilisez
rank.fusion.window_sizepour limiter le nombre maximum de résultats à fusionner. Le moteur principal (le moteurdefaulten tête de liste) récupère jusqu’àwindow_sizerésultats, tandis que chacun des autres moteurs récupèrewindow_size ÷ nombre de moteursrésultats.
Temps de traitement
Le temps de réponse augmente car plusieurs recherches sont exécutées.
Utilisez
rank.fusion.threadspour définir le nombre de threads pour l’exécution parallèle.
Dépannage
Les résultats de recherche diffèrent des attentes
Symptôme : Les résultats après Rank Fusion diffèrent des attentes
Vérifications :
Vérifier les résultats de chaque type de recherche individuellement
Ajuster la valeur de
rank.fusion.rank_constantAjuster la valeur de
rank.fusion.window_sizeSur les pages profondes (où
position de début × 2est supérieur ou égal àrank.fusion.window_size), la fusion n’est pas effectuée et seul le moteur principal est utilisé. Pour obtenir des résultats fusionnés sur davantage de pages, augmentezrank.fusion.window_size.
La recherche est lente
Symptôme : La recherche devient lente lorsque le Rank Fusion est activé
Solutions :
Réduire
rank.fusion.window_sizeAjuster
rank.fusion.threads
Mémoire insuffisante
Symptôme : Une erreur OutOfMemoryError se produit
Solutions :
Réduire
rank.fusion.window_sizeAugmenter la taille du tas JVM
Référence
Apercu du scripting - Aperçu du scripting
Paramètres avancés liés à la recherche - Configuration avancée de la recherche
Vue d’ensemble de l’intégration LLM - Guide d’intégration LLM (Recherche sémantique)