Recherche hybride dans Qdrant
La recherche hybride signifie exécuter deux ou plusieurs recherches différentes en parallèle et combiner leurs résultats en un seul.
Dans Qdrant, cela est alimenté par l'API Query via prefetch : chaque prefetch exécute exactement un type de recherche de manière indépendante, et la query externe combine les résultats des prefetches parallèles.
Les prefetches peuvent être imbriqués et les recherches peuvent être multi-étapes, tout le pipeline se déroulant en une seule requête via l'API Query. Voir Universal Query API pour des exemples.
Identifiez le problème de l'utilisateur et sélectionnez les éléments constitutifs :
- Ce qui peut entrer dans un prefetch, par exemple alimenter une recherche, dans Search Types
- Comment combiner les résultats de ces recherches (RRF, DBSF, FormulaQuery, reranking) dans Combining Searches
En fonction de ce que vous avez choisi, testez votre approche :
- Configurez la collection Qdrant avec des named vectors, où chaque named vector correspond généralement à une représentation (modèles d'embedding différents ou types de vecteurs différents) d'un point de données.
- Construisez une requête de recherche hybride avec l'API Query à partir de vos éléments constitutifs. Vous pouvez rechercher indépendamment parmi un type de vecteurs, avec
prefetch+using, comme le montrent les exemples dans la documentation Hybrid Queries. - Évaluez la qualité de la recherche hybride sur les données réelles de l'utilisateur et fournissez-lui des améliorations et des compromis (vitesse/ressources).
Quel est le degré d'isolation des recherches parallèles ?
À utiliser quand : différents tenants partagent une collection et vous devez comprendre les garanties d'isolation de la recherche hybride.
Si l'utilisateur veut isoler/partager les pipelines de recherche hybride entre tenants, considérez que :
- Les index (creux, payload et denses) et le modificateur IDF pour les vecteurs creux sont calculés indépendamment par shard, et non par tenant.
- Le prefetch s'exécute indépendamment par shard pour récupérer les résultats #limit, donc pour les prefetches au niveau de la collection, si la collection a plusieurs shards, Qdrant prefetchera toujours #limit * #shard résultats en arrière-plan. Les résultats finaux sont fusionnés en fonction des scores.
- Dans les prefetches imbriqués (plus profonds que 1 niveau), les méthodes décrites dans « Combining Searches » peuvent d'abord être appliquées au niveau du shard, puis les résultats par shard seront à nouveau fusionnés en fonction des scores.
À ne pas faire
- Choisir un modèle de recherche hybride basé sur des « impressions » sans aucune évaluation de la qualité de la recherche hybride en place.
- Créer trop de named vectors sans nécessité. Un named vector non rempli peut prendre autant de ressources qu'un named vector rempli.