Elasticsearch knn

Opster Team


Introduction to k-NN Search in Elasticsearch

The k-Nearest Neighbor (k-NN) search is a powerful technique used in Elasticsearch for similarity search and recommendation systems. It enables you to find the k most similar documents to a given query document based on a specific distance metric. The k-NN search is particularly useful in scenarios where you need to find similar items, such as product recommendations, image search, and document similarity.

In this article, we will discuss advanced techniques and optimization strategies for k-NN search in Elasticsearch. We will cover the following topics:

  1. Indexing and searching with k-NN
  2. Distance metrics
  3. Indexing and search performance optimization
  4. Handling large-scale data

1. Indexing and Searching with k-NN

To use k-NN search in Elasticsearch, you need to create an index with a specific mapping that includes a dense_vector field type. This field type is used to store the vector representation of your documents. Here’s an example of how to create an index with a dense_vector field:

PUT /my_index
  "mappings": {
    "properties": {
      "my_vector": {
        "type": "dense_vector",
        "dims": 128

In this example, the “my_vector” field has a dimensionality of 128. You can index documents with their vector representation using the following format:

PUT /my_index/_doc/1
  "my_vector": [0.1, 0.2, 0.3, ..., 0.128]

To perform a k-NN search, you can use the script_score query with a custom similarity function. Here’s an example of a k-NN search using the Euclidean distance metric:

POST /my_index/_search
  "query": {
    "script_score": {
      "query": {
        "match_all": {}
      "script": {
        "source": "1 / (1 + l2norm(params.query_vector, 'my_vector'))",
        "params": {
          "query_vector": [0.1, 0.2, 0.3, ..., 0.128]
  "size": 10

2. Distance Metrics

Elasticsearch supports several distance metrics for k-NN search, including Euclidean distance, cosine similarity, and dot product. You can choose the appropriate distance metric based on your use case and data characteristics. Here are some examples:

  • Euclidean distance: Suitable for dense vectors and when the magnitude of the vectors is important.
  • Cosine similarity: Suitable for sparse vectors and when the angle between the vectors is important.
  • Dot product: Suitable for cases where the magnitude of the vectors is not important, and you want to focus on the direction.

3. Indexing and Search Performance Optimization

To optimize the performance of k-NN search in Elasticsearch, consider the following strategies:

  • Use shard allocation awareness to distribute the index across multiple nodes, which can help parallelize the search process and improve query performance.
  • Use the force_merge API to reduce the number of segments in the index, which can help improve search performance.
  • Use the search_after parameter to paginate through large result sets, which can help reduce memory usage and improve search performance.
  • Use the filter context to pre-filter documents before performing the k-NN search, which can help reduce the search space and improve query performance.

4. Handling Large-Scale Data

When dealing with large-scale data, you may need to consider additional strategies to improve the performance and scalability of k-NN search in Elasticsearch:

  • Use approximate nearest neighbor algorithms, such as HNSW or Annoy, to speed up the search process.
  • Use dimensionality reduction techniques, such as PCA or t-SNE, to reduce the size of the vector representation and improve search performance.
  • Use distributed search techniques, such as cross-cluster search or federated search, to search across multiple Elasticsearch clusters.


In this article, we discussed advanced techniques and optimization strategies for k-NN search in Elasticsearch. By understanding the underlying concepts and applying the appropriate optimization strategies, you can build powerful similarity search and recommendation systems using Elasticsearch.

Next step

Opster AutoOps and Opster Support Team can assist you in optimizing and managing your Elasticsearch KNN (k-nearest neighbors) configurations. By providing expert guidance and automated solutions, you can achieve better search performance and relevancy for your specific use case.


Analyze your cluster & get personalized recommendations

Skip to content