Qdrant : Fonctionnalités Avancées de Recherche Vectorielle
Exploitez les fonctionnalités puissantes de Qdrant : indexation de payload, quantization, déploiement distribué pour des systèmes RAG haute performance.
- Auteur
- Équipe de Recherche Ailog
- Date de publication
- Temps de lecture
- 13 min de lecture
- Niveau
- advanced
- Étape du pipeline RAG
- Storage
Pourquoi Qdrant ? • Open-source et auto-hébergé • Filtrage avancé • Quantization scalaire (4x plus petit) • Clustering distribué • Vecteurs sparse intégrés
Configuration Docker
``bash docker run -p 6333:6333 qdrant/qdrant `
`python from qdrant_client import QdrantClient from qdrant_client.models import Distance, VectorParams
client = QdrantClient("localhost", port=6333)
Créer une collection client.create_collection( collection_name="documents", vectors_config=VectorParams( size=1536, distance=Distance.COSINE ) ) `
Indexation de Payload
Indexer les métadonnées pour un filtrage rapide :
`python Créer un index sur le champ "category" client.create_payload_index( collection_name="documents", field_name="category", field_schema="keyword" )
Créer un index sur le champ numérique "price" client.create_payload_index( collection_name="documents", field_name="price", field_schema="integer" )
Maintenant le filtrage est rapide results = client.search( collection_name="documents", query_vector=embedding, query_filter=Filter( must=[ FieldCondition(key="category", match=MatchValue(value="tech")), FieldCondition(key="price", range=Range(lt=100)) ] ), limit=10 ) `
Quantization (Compression 4x)
`python from qdrant_client.models import ScalarQuantization, ScalarType, QuantizationSearchParams
Activer la quantization client.update_collection( collection_name="documents", quantization_config=ScalarQuantization( type=ScalarType.INT8, quantile=0.99, always_ram=True ) )
Rechercher avec quantization results = client.search( collection_name="documents", query_vector=embedding, search_params=QuantizationSearchParams( ignore=False, Utiliser les vecteurs quantizés rescore=True Rescorer avec précision complète ), limit=10 ) `
Résultat : Index 1GB → 256MB (4x plus petit, 10% de perte de précision)
Déploiement Distribué
`yaml docker-compose.yml version: '3.8' services: qdrant-node1: image: qdrant/qdrant environment: • QDRANT__CLUSTER__ENABLED=true • QDRANT__CLUSTER__P2P__PORT=6335 ports: • "6333:6333"
qdrant-node2: image: qdrant/qdrant environment: • QDRANT__CLUSTER__ENABLED=true • QDRANT__CLUSTER__P2P__PORT=6335 • QDRANT__CLUSTER__BOOTSTRAP__P2P__URI=qdrant-node1:6335 `
Vecteurs Sparse (Recherche Hybride)
`python from qdrant_client.models import SparseVector, NamedVector
Insertion avec dense et sparse client.upsert( collection_name="hybrid", points=[{ "id": 1, "vector": { "dense": [0.1, 0.2, ...], Embedding dense "sparse": SparseVector( indices=[10, 45, 123], values=[0.5, 0.3, 0.2] ) }, "payload": {"text": "..."} }] )
Recherche hybride results = client.query_points( collection_name="hybrid", prefetch=[ Prefetch(using="dense", query=[0.1, 0.2, ...], limit=100), Prefetch(using="sparse", query=SparseVector(...), limit=100) ], query=FusionQuery(fusion=Fusion.RRF), limit=10 ) ``
Qdrant combine puissance, flexibilité et performance. Parfait pour les cas d'usage RAG avancés.