Skip to main content
For the complete documentation index for agents and LLMs, see llms.txt.

ElasticsearchEmbeddingRetriever

Retrieve documents from the ElasticsearchDocumentStore based on their semantic similarity to the query.

Key Features

  • Semantic similarity-based retrieval using approximate kNN search.
  • Only compatible with ElasticsearchDocumentStore.
  • Compares query embeddings to document embeddings to find the most relevant results.
  • Requires a text embedder before it in the pipeline, and the embedding model must match the one used in the indexing pipeline.
  • Can be combined with ElasticsearchBM25Retriever and DocumentJoiner for hybrid retrieval.

Configuration

  1. Drag the ElasticsearchEmbeddingRetriever component onto the canvas from the Component Library.
  2. Click on the component to open the configuration panel.
  3. On the General tab:
    1. Configure the document_store connection with your Elasticsearch hosts and index name.
    2. Set top_k to the maximum number of documents to return.
  4. Go to the Advanced tab to configure filters, num_candidates, and filter_policy.

Connections

ElasticsearchEmbeddingRetriever receives a query embedding (a list of floats) from a text embedder such as DeepsetNvidiaTextEmbedder. It outputs a list of semantically similar documents through its documents output. You can connect its output to a ranker or DocumentJoiner for hybrid retrieval with ElasticsearchBM25Retriever.

Source Code

To check this component's source code, open embedding_retriever.py in the Haystack Core Integrations repository.

Usage Examples

Basic Configuration

  ElasticsearchEmbeddingRetriever:
type: haystack_integrations.components.retrievers.elasticsearch.embedding_retriever.ElasticsearchEmbeddingRetriever
init_parameters:
top_k: 10
filter_policy: replace
document_store:
type: haystack_integrations.document_stores.elasticsearch.document_store.ElasticsearchDocumentStore
init_parameters:
index: my_index
embedding_similarity_function: cosine

Using the Component in a Pipeline

This is an example of a document search pipeline that uses ElasticsearchEmbeddingRetriever combined with ElasticsearchBM25Retriever and then joins the results with a DocumentJoiner.

components:
query_embedder:
type: deepset_cloud_custom_nodes.embedders.nvidia.text_embedder.DeepsetNvidiaTextEmbedder
init_parameters:
normalize_embeddings: true
model: intfloat/e5-base-v2

document_joiner:
type: haystack.components.joiners.document_joiner.DocumentJoiner
init_parameters:
join_mode: concatenate

ranker:
type: deepset_cloud_custom_nodes.rankers.nvidia.ranker.DeepsetNvidiaRanker
init_parameters:
model: "intfloat/simlm-msmarco-reranker"
top_k: 20

ElasticsearchEmbeddingRetriever:
type: haystack_integrations.components.retrievers.elasticsearch.embedding_retriever.ElasticsearchEmbeddingRetriever
init_parameters:
filters:
top_k: 10
num_candidates:
filter_policy: replace
document_store:
type: haystack_integrations.document_stores.elasticsearch.document_store.ElasticsearchDocumentStore
init_parameters:
hosts:
custom_mapping:
index: 'my_index'
embedding_similarity_function: cosine
ElasticsearchBM25Retriever:
type: haystack_integrations.components.retrievers.elasticsearch.bm25_retriever.ElasticsearchBM25Retriever
init_parameters:
filters:
fuzziness: AUTO
top_k: 10
scale_score: false
filter_policy: replace
document_store:
type: haystack_integrations.document_stores.elasticsearch.document_store.ElasticsearchDocumentStore
init_parameters:
hosts:
custom_mapping:
index: 'my_index'
embedding_similarity_function: cosine

connections: # Defines how the components are connected
- sender: document_joiner.documents
receiver: ranker.documents
- sender: query_embedder.embedding
receiver: ElasticsearchEmbeddingRetriever.query_embedding
- sender: ElasticsearchEmbeddingRetriever.documents
receiver: document_joiner.documents
- sender: ElasticsearchBM25Retriever.documents
receiver: document_joiner.documents

inputs: # Define the inputs for your pipeline
query: # These components will receive the query as input
- "query_embedder.text"
- "ranker.query"
- ElasticsearchBM25Retriever.query

filters: # These components will receive a potential query filter as input
- "ElasticsearchEmbeddingRetriever.filters"
- "ElasticsearchBM25Retriever.filters"

outputs: # Defines the output of your pipeline
documents: "ranker.documents" # The output of the pipeline is the retrieved documents

max_runs_per_component: 100

metadata: {}

Parameters

Inputs

ParameterTypeDefaultDescription
query_embeddingList[float]Embedding of the query.
filtersOptional[Dict[str, Any]]NoneFilters applied when fetching documents from the Document Store. Filters are applied during the approximate kNN search to ensure the Retriever returns top_k matching documents. The way runtime filters are applied depends on the filter_policy selected when configuring the Retriever.
top_kOptional[int]NoneMaximum number of documents to return.

Outputs

ParameterTypeDefaultDescription
documentsList[Document]List of documents most similar to the given query_embedding.

Init Parameters

These are the parameters you can configure in Pipeline Builder:

ParameterTypeDefaultDescription
document_storeElasticsearchDocumentStoreThe Elasticsearch document store to retrieve documents from.
filtersOptional[Dict[str, Any]]NoneFilters applied to the retrieved Documents. Filters are applied during the approximate KNN search to ensure that top_k matching documents are returned.
top_kint10Maximum number of Documents to return.
num_candidatesOptional[int]NoneNumber of approximate nearest neighbor candidates on each shard. Defaults to top_k * 10. Increasing this value improves search accuracy at the cost of slower search speeds. You can read more about it in the Elasticsearch documentation
filter_policyUnion[str, FilterPolicy]FilterPolicy.REPLACEPolicy to determine how filters are applied. Possible options:
- REPLACE (default): Overrides the initialization filters with the filters specified at runtime. Use this policy to dynamically change filtering for specific queries.
- MERGE: Combines runtime filters with initialization filters to narrow down the search.

Run Method Parameters

These are the parameters you can configure for the component's run() method. This means you can pass these parameters at query time through the API, in Playground, or when running a job. For details, see Modify Pipeline Parameters at Query Time.

ParameterTypeDefaultDescription
query_embeddingList[float]Embedding of the query.
filtersOptional[Dict[str, Any]]NoneFilters applied when fetching documents from the Document Store. Filters are applied during the approximate kNN search to ensure the Retriever returns top_k matching documents. The way runtime filters are applied depends on the filter_policy selected when initializing the Retriever.
top_kOptional[int]NoneMaximum number of documents to return.