【问题标题】:How to make _source field dynamic in elasticsearch search template?如何在 elasticsearch 搜索模板中使 _source 字段动态化?
【发布时间】:2021-03-11 11:21:04
【问题描述】:

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

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

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

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

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

我们有什么方法可以从客户端传递搜索字段,以便它只返回响应用户请求的字段? 我已经在一个领域实现了这一点,比如你这样做

"_source": "{{field}}"

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

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

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

【问题讨论】:

    标签: elasticsearch kibana dsl elasticsearch-query elasticsearch-template


    【解决方案1】:

    绝对!!

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

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

    然后你可以这样称呼它:

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

    它将执行transform the params.fields array into JSON,因此生成的查询将如下所示:

    "_source": ["name"]
    

    【讨论】:

    • "_source": {{#toJson}}fields{{/toJson}} 这将在双引号 "" 内?如果不是,那么它将不是有效的 JSON,所以我需要将搜索模板作为字符串上传?
    • 是的,这种情况下模板需要存储为字符串
    • 太棒了,很高兴它有帮助!
    • 有没有不破坏JSON格式的选项?
    • 搜索模板是用 mustache 语法编写的,所以由于 {{#toJson}}...{{/toJson}} 不是真正的 JSON,您需要使用文本来代替。这是个问题吗?
    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多