Elasticsearch Retriever¶
Use ElasticsearchRetriever to evaluate dense-vector kNN search results from Elasticsearch.
Install¶
pip install "evret[elasticsearch]"
Basic Usage¶
from evret.retrievers import ElasticsearchRetriever
def encode_query(query: str) -> list[float]:
return embedding_model.embed_query(query)
retriever = ElasticsearchRetriever(
index_name="docs",
vector_field="embedding",
query_encoder=encode_query,
client_kwargs={"hosts": ["http://localhost:9200"]},
id_field="doc_id",
)
results = retriever.retrieve("what is retriever evaluation?", k=5)
for item in results:
print(item.doc_id, item.score, item.metadata)
With an Existing Elasticsearch Client¶
from elasticsearch import Elasticsearch
from evret.retrievers import ElasticsearchRetriever
client = Elasticsearch("http://localhost:9200")
retriever = ElasticsearchRetriever(
index_name="docs",
vector_field="embedding",
query_encoder=encode_query,
client=client,
filter={"term": {"file_type": "pdf"}},
num_candidates=50,
)
Notes¶
query_encodermust return a non-empty vector- Search uses Elasticsearch's
knnoption withfield,query_vector,k, andnum_candidates doc_idis resolved from sourceid_fieldfirst, then Elasticsearch_idfilteris passed inside theknnobject so Elasticsearch applies it during vector search