Apercu
La fonctionnalite Rank Fusion de Fess integre plusieurs resultats de recherche pour fournir des resultats de recherche plus precis.
Qu’est-ce que le Rank Fusion
Le Rank Fusion est une technique qui combine les resultats de plusieurs algorithmes de recherche ou methodes de notation pour generer un classement unique optimise.
Principaux avantages :
Combine les forces de differents algorithmes
Ameliore la precision de la recherche
Fournit des resultats de recherche diversifies
Algorithmes pris en charge
Fess prend en charge les algorithmes de Rank Fusion suivants :
| Algorithme | Description |
|---|---|
| RRF (Reciprocal Rank Fusion) | Algorithme de fusion utilisant l’inverse du rang |
| Score Fusion | Fusion par normalisation des scores et moyenne ponderee |
| Borda Count | Fusion de classement basee sur le vote |
RRF (Reciprocal Rank Fusion)
RRF calcule les scores en additionnant l’inverse du rang de chaque resultat.
Formule
score(d) = Σ 1 / (k + rank(d))
k: Parametre constant (par defaut : 60)rank(d): Rang du document d dans chaque resultat de recherche
Configuration
fess_config.properties
Configuration de base
# Activer le Rank Fusion
rank.fusion.enabled=true
# Algorithme a utiliser
rank.fusion.algorithm=rrf
# Parametre k de RRF
rank.fusion.rrf.k=60
# Types de recherche pour la fusion
rank.fusion.search.types=keyword,semantic
Configuration par algorithme
Configuration RRF
rank.fusion.algorithm=rrf
rank.fusion.rrf.k=60
Configuration Score Fusion
rank.fusion.algorithm=score
rank.fusion.score.normalize=true
rank.fusion.score.weights=0.7,0.3
Configuration Borda Count
rank.fusion.algorithm=borda
rank.fusion.borda.top_n=100
Integration avec la recherche hybride
Le Rank Fusion est particulierement efficace dans la recherche hybride combinant la recherche par mots-cles et la recherche semantique.
Exemple de configuration
# Activer la recherche hybride
search.hybrid.enabled=true
# Fusionner les resultats de recherche par mots-cles et semantique
rank.fusion.enabled=true
rank.fusion.algorithm=rrf
rank.fusion.rrf.k=60
# Poids pour chaque type de recherche
search.hybrid.keyword.weight=0.6
search.hybrid.semantic.weight=0.4
Exemples d’utilisation
Recherche hybride de base
Calculer le score BM25 avec la recherche par mots-cles
Calculer la similarite vectorielle avec la recherche semantique
Fusionner les deux resultats avec RRF
Generer le classement final
Flux de recherche
User Query
↓
┌──────────────────┬──────────────────┐
│ Keyword Search │ Semantic Search │
│ (BM25) │ (Vector) │
└────────┬─────────┴────────┬─────────┘
↓ ↓
Rank List 1 Rank List 2
└────────┬─────────┘
↓
Rank Fusion (RRF)
↓
Final Ranking
Notation personnalisee
Exemple de combinaison de plusieurs facteurs de notation
# Score de recherche de base + Boost par date + Popularite
rank.fusion.enabled=true
rank.fusion.algorithm=score
rank.fusion.score.factors=relevance,recency,popularity
rank.fusion.score.weights=0.5,0.3,0.2
Considerations de performance
Utilisation memoire
L’utilisation memoire augmente car plusieurs resultats de recherche sont conserves
Limitez le nombre maximum de cibles de fusion avec
rank.fusion.max.results
# Nombre maximum de resultats pour la fusion
rank.fusion.max.results=1000
Temps de traitement
Le temps de reponse augmente car plusieurs recherches sont executees
Envisagez l’optimisation par execution parallele
# Activer l'execution parallele
rank.fusion.parallel=true
rank.fusion.thread.pool.size=4
Cache
Utilisez le cache pour les requetes frequentes
# Cache pour les resultats de Rank Fusion
rank.fusion.cache.enabled=true
rank.fusion.cache.size=1000
rank.fusion.cache.expire=300
Depannage
Les resultats de recherche different des attentes
Symptome : Les resultats apres Rank Fusion different des attentes
Verifications :
Verifier les resultats de chaque type de recherche individuellement
Verifier que la ponderation est appropriee
Ajuster la valeur du parametre k
La recherche est lente
Symptome : La recherche devient lente lorsque le Rank Fusion est active
Solutions :
Activer l’execution parallele
rank.fusion.parallel=true
Limiter le nombre de resultats cibles de fusion
rank.fusion.max.results=500
Activer le cache
rank.fusion.cache.enabled=true
Memoire insuffisante
Symptome : Une erreur OutOfMemoryError se produit
Solutions :
Reduire le nombre maximum de resultats cibles de fusion
Augmenter la taille du tas JVM
Desactiver les types de recherche inutiles
Reference
Apercu du scripting - Apercu du scripting
../admin/search-settings - Guide de configuration de la recherche
Apercu de l’integration LLM - Guide d’integration LLM (Recherche semantique)