1. Vecteurs et kNN #
Chercher par le sens.
Mapping et requête #
PUT docs
{ "mappings": { "properties": {
"title": { "type": "text", "analyzer": "french" },
"content": { "type": "text", "analyzer": "french" },
"content_vector": { "type": "dense_vector", "dims": 384, "index": true, "similarity": "cosine" } } } }
GET docs/_search
{ "knn": { "field": "content_vector", "query_vector": [0.12, -0.03, "..."], "k": 10, "num_candidates": 100 },
"_source": [ "title" ] }Les embeddings sont calculés par un modèle (dans votre application, ou dans Elasticsearch via l'API d'inférence et le type semantic_text, qui gère découpage et vectorisation automatiquement).
2. Recherche hybride #
Le meilleur des deux.
RRF #
GET docs/_search
{
"retriever": { "rrf": {
"retrievers": [
{ "standard": { "query": { "match": { "content": "réinitialiser le mot de passe" } } } },
{ "knn": { "field": "content_vector", "query_vector": [0.12, -0.03, "..."], "k": 20, "num_candidates": 100 } }
],
"rank_window_size": 50
} },
"size": 5
}- BM25 excelle sur les termes exacts (codes d'erreur, noms de produits) ; le vectoriel sur les reformulations.
- Reciprocal Rank Fusion combine les classements sans avoir à calibrer des scores incomparables.
- Pour un RAG, les 3 à 5 meilleurs passages sont envoyés au LLM avec la question, en citant leurs sources.
À savoir : Certaines fonctionnalités dépendent de la version et du niveau de licence (Basic, Platinum, Enterprise) : vérifiez-les dans la documentation et la page des abonnements Elastic avant de les utiliser en production.
