Search 模板/Multi Search 模板

Search Template / Search 模板

_search/template endpoint 允许我们在执行搜索请求和使用模板参数填充现有模板之前,能够使用 mustache语言预先呈现搜索请求。

GET /_search/template
{
    "inline" : {
      "query": { "match" : { "{{my_field}}" : "{{my_value}}" } },
      "size" : "{{my_size}}"
    },
    "params" : {
        "my_field" : "foo",
        "my_value" : "bar",
        "my_size" : 5
    }
}

关于Mustache templating以及你可以使用哪种模板,请参考mustache 项目在线文档

NOTE:

elasticsearch中实现的mustache语言是作为一种沙箱(sandboxed) 脚本语言,因此它遵守相关设置,这些设置可能是为了启用或禁用脚本文档 (scripting docs)中描述的每个语言、源和操作。

更多的模板案例

使用单个值填充查询字符串

将参数转换为JSON

{{#toJson}}parameter{{/toJson}} 函数可以用来转换参数(比如 maps 和 array)为它们的 JSON 形式。

其呈现为:

更复杂的例子代替一个JSON对象数组:

呈现为:

连接值的数组

{{#join}}array{{/join}}函数能用来将数组的值连接为以逗号分隔的字符串

其呈现为:

该函数还可以接受一个自定义分隔符:

呈现为:

默认值

默认值被写成{{var}}{{^var}}default{{/var}}比如:

此时params{ "start": 10, "end": 15 },该查询可以呈现为:

但是,当params{ "start": 10 }时, 该查询就会使用默认值作为end:

条件语句

条件语句不能使用模板的JSON形式表示。相反,模板必须作为字符串传递。例如,假设我们想在line字段上运行match查询,并且可以选择用行号过滤其中startend是可选的。

参数(params)会像这样:

所有这三个元素都是可选的。

查询语句我们可以是:

① 填充text参数值。

② 仅当指定line_no 时才能包含range过滤器。

③ 仅当指定了line_no.start时才能包含gte子句。

④ 填充line_no.start参数值。

⑤ 仅当line_no.startline_no.end被指定时,在gte子句后添加逗号。

⑦ 仅当指定line_no.end时,包含lte子句。

⑩ 填充line_no.end参数值。

注意

如上所述,模板不是有效的JSON形式,因为它包含类似 的部分标记,因此,模板应存储在文件中(参考预注册模板一节)或者在通过REST API使用时,应该将其写成字符串格式,比如:

预注册(Pre-registered)模板

你可以通过将搜索模板存储在config/scripts目录中,在使用.mustache扩展名的文件中注册搜索模板。为了执行存储的模板,请使用template键下单名称来引用它:

config/sripts/查询模板的名称,即:

storedTemplate.mustache.

你还可以通过将搜索模板存储在集群状态中来注册搜索模板,由REST API来管理这些索引的模板。

该模板可以通过以下方法来检查:

其可以呈现为:

这个模板可以被删除:

① 存储在.scripts索引中的查询模板的名称。

验证(Validating)模板

可以在具有给定参数的响应中使用来呈现模板:

次调用将返回呈现的模板:

① status 数据已使用来自 params 对象的值填充。

文件和索引模板也可以通过分别用 file 或 id 代替 inline 来呈现。例如,呈现文件模板:

预注册模板可以使用以下呈现:

Multi Search 模板

多搜索(Multi Search)模板API允许使用_msearch/template端点在同一个API中执行多个搜索模板请求。

以下请求形式与 多搜索API形式相似:

header部分与一般的多搜索 API 支持相同的indextypessearch_typepreferencerouting选项。

body部分包含一个搜索模板body请求,并且支持 inline,存储和文件模板。比如:

①inline 搜索模板请求

②基于存储模板的搜索模板请求

③基于文件模板的搜索模板请求

响应返回一个 .response 数组,其中包括每个搜索模板请求的搜索模板响应,该响应匹配其在原始多搜索模板请求中的顺序。如果该特定搜索模板请求的完全失败,将返回error消息的对象,而不是实际的搜索响应。

Last updated

Was this helpful?