Elasticsearch Elasticsearch Search Template

By Opster Team

Updated: Aug 29, 2023

| 2 min read

If you want to learn more about Elasticsearch templates, check out this guide.

Quick links


Elasticsearch search templates are a useful tool that can significantly enhance the efficiency and readability of your queries. They allow you to define templates and utilize them to format queries, which can be particularly useful when dealing with complex and repetitive query structures. Search templates are also useful to define a clear contract interface with your client applications, so they don’t have to deal with complex query logic. This article will delve into the intricacies of Elasticsearch search templates, providing you with a comprehensive understanding of how to use them effectively.

Search templates in Elasticsearch are based on Mustache scripting language, which is a logic-less template syntax. It can be used for HTML, config files, source code – essentially anything. It works by expanding tags in a template using values provided in a hash or object.

Creating and registering search templates

To use search templates, you need to first create and register them. This can be done using the _scripts API. Here’s an example of how to create a search template:

POST _scripts/<template_name>
  "script": {
    "lang": "mustache",
    "source": {
      "query": { "match" : { "{{fieldName}}" : "{{value}}" } }

In this example, `<template_name>` is the name of your template, `{{fieldName}}` and `{{value}}` are placeholders that will be replaced by actual values when the template is used.

Using a search template

Once the template is registered, you can use it to format your queries. Here’s an example of how to use a search template:

GET /_search/template
    "id": "<template_name>",
    "params": {
        "fieldName": "user",
        "value": "John Doe"

In this example, the `id` field specifies the name of the template to use, and the `params` field provides the values to replace the placeholders in the template.

Using search templates with multi search API

Search templates can also be used with the multi search API. This allows you to execute multiple search requests in a single API call, which can significantly improve performance when dealing with large amounts of data. Here’s an example of how to use a search template with the multi search API:

POST _msearch/template
{ "index" : "test" }
{ "id": "<template_name>", "params": { "fieldName": "user",  "value": "John Doe" }}

In this example, the `index` field specifies the index to search, and the `id` and `params` fields are used as before.