如何在 elasticsearch 搜索模板中使 _source 字段动态化?

How to make _source field dynamic in elasticsearch search template?

在弹性搜索中使用搜索查询时,我们定义响应中需要的字段

"_source": ["name", "age"]

并且在使用 search templates 时,我们必须在将搜索模板插入 ES 集群时设置 _source 字段值。

"_source": ["name", "age"]

但搜索模板的问题在于它总是 return 我们 name and age 并且要获得其他字段,我们必须相应地更改我们的搜索模板。

有什么方法可以让我们从客户端传递搜索字段,以便它只会 return 响应用户请求的字段? 我已经实现了一个领域,就像你这样做一样

"_source": "{{field}}"

然后在通过模板搜索索引时,您可以这样做

POST index_name/_search/template
{
  "id": template_id,
  "params": {
    "field": "name"
  }
}

此搜索查询 return 将 name 字段作为响应,但我找不到将其作为数组或其他格式传递的方法,因此我可以获得多个字段。

绝对!!

您的搜索模板应如下所示:

"_source": {{#toJson}}fields{{/toJson}}

然后你可以这样称呼它:

POST index_name/_search/template
{
  "id": template_id,
  "params": {
    "fields": ["name"]
  }
}

它要做的是 transform the params.fields array into JSON 因此生成的查询将如下所示:

"_source": ["name"]