查询模板

您可通过查询模板将常用的查询逻辑进行固化,实现“一次定义,多次复用”。通过查询模板,应用开发者和数据分析人员无需频繁修改代码或学习复杂的DSL(Domain Specific Language)语句,只需传入参数即可执行查询操作,显著提升开发效率与系统安全性。

功能优势

  • 易用性:支持快速生成及复用查询逻辑,避免代码冗余,降低维护成本。

  • 安全性:仅允许执行预定义模板,降低查询注入风险,保障系统稳定。

  • 便捷性:支持自动生成模板,可一键复制到Kibana进行测试。

使用场景

  • 应用开发者:固化常见查询模式(例如,将电商搜索中的“类别 + 品牌 + 价格区间”固化为可复用的模板),调用模板时只需传入参数,无需重复编写DSL或修改服务代码。

  • 新手用户:无需掌握复杂的DSL语法,可通过系统自动生成模板,快速上手、轻松构建有效查询。

使用限制

  • ES Serverless后续将对Mustache脚本类型全部开放,目前输入的脚本需要符合ServerlessQuery白名单限制

    说明

    Mustache是一个无逻辑的模板引擎,支持多种编程语言(例如,Python、Java、JavaScript等)。它通过变量替换和条件/循环结构生成动态文本,常用于HTML、配置文件、API响应等场景。

  • 单个应用内创建的查询模板(即Mustache脚本)最多不超过10个。您可通过申请调整mustache_script_quota配额项的大小,获取更多模板数量。

  • Mustache脚本最大长度不超过10240个字符,且脚本中不支持再嵌入其他脚本。

说明

如有特殊需求(例如,更改脚本限制),请提交工单联系技术支持人员处理。

进入查询模板

  1. 进入应用详情页。

    1. 登录Elasticsearch Serverless控制台,在顶部菜单栏切换至目标地域。

    2. 在左侧导航栏单击应用管理,单击已创建的应用名称,进入应用详情页。

  2. 在左侧导航栏的搜索调优中心 > 查询模板页签,您可按需新建模板查看及使用模板,并执行相关模板管理操作。

    说明

    本文示例的所有代码,均可进入Kibana界面执行。

新建模板

在查询模板页签单击创建模板,即可按需选择手动创建或智能生成模板。

手动创建

  • 通过控制台界面创建

    创建查询模板对话框,选择手动创建,输入模板名称及模板内容,按照界面指引创建。模板名称必须在当前应用内唯一,后续可通过此名称来引用该模板。image

    模板内容示例如下。

    {
      "query": {
        "match": {
          "{{my_field}}": "{{my_value}}"
        }
      }
    }
    • {my_field}:要搜索的字段名称。

    • {my_value}:要搜索的关键词。

  • 通过REST API创建

    创建模板的示例代码如下。

    PUT _scripts/{id}
    {
      "script": {
         "lang": "mustache",
         "source": {
           // 在其中编辑脚本 以下为例子
            "query": {
                "match": {
                    "message": "{{query_string}}"
                 }
             },
         "from": "{{from}}",
         "size": "{{size}}"
        }
      }
    }
    • {id}:模板的名称。后续可通过该名称来引用当前模板。模板名称必须在当前应用内唯一。

    • {query_string}:自定义的搜索内容。

自动创建

创建查询模板 > 自动推断对话框,选择需要查询的索引,系统会根据索引结构,使用内置大语言模型(LLM)模块自动推断并生成查询模板。

说明

使用前须先创建索引,并且不同索引结构生成的查询模板存在差异,具体请以实际界面为准。

image

示例生成的查询模板代码如下,用于在文档索引中进行全文检索,支持基于文本的相关性搜索,适用于标题和描述内容的模糊匹配场景。

{
  "query": {
    "bool": {
      "must": [
        {
          "multi_match": {
            "query": "{{query_text}}",
            "fields": [
              "title^1.5",
              "description"
            ],
            "type": "best_fields",
            "operator": "or"
          }
        }
      ],
      "filter": [
        {
          "match_all": {}
        }{{#id_filter}},
        {
          "term": {
            "id": "{{id_filter}}"
          }
        }{{/id_filter}}
      ]
    }
  },
  "highlight": {
    "fields": {
      "title": {},
      "description": {}
    }
  },
  "from": "{{from}}{{^from}}0{{/from}}",
  "size": "{{size}}{{^size}}10{{/size}}"
}

查看及使用模板

  1. 模板创建完成后,可通过如下方式查看。

    • 通过控制台查看

      在查询模板页面,可查看已创建的模板列表。单击目标模板操作列的编辑,即可查看模板详情。image

    • 通过REST API查看

      示例代码如下,{id}为您创建的模板名称。

      GET _scripts/{id}
  2. 通过REST API调用模板,在指定索引中执行相关查询操作。示例代码如下。

    GET {your_index}/_search/template
    {
      "id": "{id}",
      "params": {
        "from": "{{from}}",
        "size": "{{size}}",
        "query_string": "{{query_string}}"
      }
    }
    • {your_index}:所要查询的索引名称。

    • {id}:所要使用的查询模板名称。

    • params:传给模板的参数列表。

      • {from}:分页起始位置。

      • {size}:每页返回的结果数量。

      • {query_string}:您输入的搜索关键词。例如 ,手机

管理模板

在查询模板页面,可按需执行模板的编辑、复制、删除等操作。image

  • 编辑模板

    • 通过控制台编辑:单击目标模板操作列的编辑,可按需编辑查询模板的内容及说明信息。

    • 通过REST API编辑:可使用如下代码重新写入模板,{id}为需要编辑的模板名称。

      PUT _scripts/{id}
      {
        "script": {
           "lang": "mustache",
           "source": {
             // 编辑新模板
          }
        }
      }
  • 复制模板:单击目标模板操作列的复制模板,可复制模板内容。您可进入Kibana进行测试、使用。

  • 删除模板:

    重要

    删除操作不可逆,请谨慎执行。

    • 通过控制台删除:单击目标模板操作列的删除,可按照界面指引删除该模板。

    • 通过REST API删除:执行如下代码,删除目标模板。{id}为所要删除的模板名称。

      DELETE _scripts/{id}