首页/数据/NoSQL 速查/search template 存储查询模板
Elasticsearch89 条

search template 存储查询模板

查询模板把带参数的查询存成脚本(mustache 语法),调用方只传参数不传查询结构;便于统一查询口径、限制可变的查询范围。

NoSQL 速查数据更新于 2026-10-12
存储PUT /_scripts/<id>,body 里 script.lang=mustache
调用GET /<index>/_search/template,传 id 与 params
返回值渲染模板里用 {{var}} 与 {{#cond}}...{{/cond}} 条件块

示例

示例
PUT /_scripts/my_template
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": { "match": { "title": "{{query_string}}" } },
      "size": "{{size}}"
    }
  }
}

GET /my-index/_search/template
{
  "id": "my_template",
  "params": { "query_string": "elastic", "size": 5 }
}
模板参数字符串会按查询语法解释,把用户输入直接塞进 match 之外的位置可能引入注入风险,优先让模板内部使用 match 查询。

易错点

  • 模板变量未传时默认渲染为空串,可能生成非法查询,调用方要保证参数齐全
  • 修改已注册脚本后立即生效,依赖模板的多个应用需同步评估兼容性

数据来源与参考

  • Elasticsearch Guide: Search template API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌