Loading

Get started with vector search

In this quickstart, you’ll set up a search that combines keyword-based and vector search approaches to find results based on both exact terms and meaning. This is called hybrid search, and in many cases it provides better results than using either approach alone.

First, you create an index and store your data in two forms: plain text and vector embeddings. Then you run a query that searches both representations and combines the results.

A running Elasticsearch cluster. Refer to Choosing your deployment type for an overview of how you can run Elasticsearch. For the fastest way to follow this quickstart, we recommend creating a serverless project (includes a free Serverless trial), or using a local development installation.

  1. Create an index mapping

    Define the index mapping. The mapping specifies the fields in your index and their data types, including both plain text fields and fields used to store vector embeddings for semantic search.

    				PUT semantic-embeddings
    					{
      "mappings": {
        "properties": {
          "semantic_text": {
            "type": "semantic_text"
          },
          "content": {
            "type": "text",
            "copy_to": "semantic_text"
          }
        }
      }
    }
    		
    1. The semantic_text field with the semantic_text field type to create and store vector embeddings. Under the hood, it uses an inference endpoint to generate the embeddings. If you don’t specify the inference_id parameter (as in the example above), the default inference endpoint is used.
    2. The content field with the text field type to store plain text. This field is used for keyword search.
    3. Values indexed into content are copied to semantic_text and processed by the default inference endpoint.
  2. Index documents

    Index sample documents with the bulk API. You only need to provide the content to the content field. The copy_to field populates semantic_text and triggers embedding generation.

    				POST _bulk
    					{ "index": { "_index": "semantic-embeddings" } }
    { "content": "After running, cool down with light cardio for a few minutes to lower your heart rate and reduce muscle soreness." }
    { "index": { "_index": "semantic-embeddings" } }
    { "content": "Marathon plans stress weekly mileage; carb loading before a race does not replace recovery between hard sessions." }
    { "index": { "_index": "semantic-embeddings" } }
    { "content": "Tune cluster performance by monitoring thread pools and refresh interval." }
    		

Run a search using the Search API.

The JSON body defines a hybrid query, where an RRF retriever combines two standard retrievers running match queries on content and semantic_text fields.

Note

An RRF retriever returns top documents based on the RRF formula, combining two or more child retrievers. This enables hybrid search by combining results from both keyword-based and semantic queries into a single ranked list.

				GET semantic-embeddings/_search
					{
  "retriever": {
    "rrf": {
      "retrievers": [
        {
          "standard": { 
            "query": {
              "match": {
                "content": "muscle soreness after jogging"
              }
            }
          }
        },
        {
          "standard": { 
            "query": {
              "match": {
                "semantic_text": "muscle soreness after jogging"
              }
            }
          }
        }
      ]
    }
  }
}
		
  1. The match query is run against the content field, which stores plain text for keyword matching.
  2. The match query is run against the semantic_text field, which stores vector embeddings for meaning-based search.

Documents that score well on either side appear in the final merged list.

  • Semantic search - Compare different semantic search workflows and choose one for your scenario (for example semantic_text, the inference API, or deploying models directly in Elasticsearch).
  • Vector search - Learn more about dense and sparse vectors, embeddings, and similarity search.
  • Ranking and reranking - Learn more about multi-stage retrieval, rescoring, and reranking for better relevance.
  • Build your search queries - Learn more about Query DSL, ES|QL, retrievers, and the Search API.