【问题标题】:elasticsearch painless access dynamically named fieldelasticsearch 无痛访问动态命名字段
【发布时间】:2018-08-09 08:16:28
【问题描述】:

我正在尝试在弹性搜索中平均一个字段,

"aggs": {
      "avg_timedifference": {
         "avg": {
            "script" : "doc['@timestamp'].value"
         }
      }

这行得通,

映射在哪里,

    {
            "_index" : "justchill",
            "_type" : "doc",
            "_id" : "cRP1bWEB6Z3gZHtPaXv1",
            "_score" : 1.0,
            "_source" : {

              "port" : 80,
              "bing.sss-ccc.tc.DOWNSTREAM_dropped.bong" : 33.0,
              "@timestamp" : "2018-02-07T01:50:55.000Z",
              "message" : "ccc.dna-ccc.tc.DOWNSTREAM_dropped.kkk 33 1517968255",
              "@version" : "1",
              "host" : "localhost"
            }
          },
          {
            "_index" : "justchill",
            "_type" : "doc",
            "_id" : "cRP1bWEB6Z3gZHtPaXv1",
            "_score" : 1.0,
            "_source" : {

              "port" : 80,
              "bong.sss-ccc.tc.DOWNSTREAM_dropped.bing" : 33.0,
              "@timestamp" : "2018-02-07T01:50:55.000Z",
              "message" : "ccc.dna-ccc.tc.DOWNSTREAM_dropped.kkk 33 1517968255",
              "@version" : "1",
              "host" : "localhost"
            }
          },

我想要做的是访问这里临时命名为 bing..bong 和 bong ..bing 的字段。该字段是动态映射的,有什么方法可以访问吗?

【问题讨论】:

    标签: elasticsearch elasticsearch-painless


    【解决方案1】:

    您可以通过params._source(原文如此)以 java-Map 的形式访问所有源代码。

    这反过来又使您可以通过keySet()-方法查找存在的键,并且您可以找到字段的确切名称。

    在您的示例中,您将获得类似于以下脚本的内容:

    for (field in params._source.keySet()) {
      if (field.startsWith('bong')) {
        return doc[field+'.keyword']
      }
    }
    return 'No field found matching bong'
    

    这只是一个基本设置;是否需要指定你想要的关键字由你决定,这个解决方案只会取第一个匹配项。

    请注意,如果您想查看多层字段,您不能只使用点查看params._source。例如,如果您想返回 host 下的所有字段,并在子字段 connection 下返回子字段 以 ip 开头的东西,那么您需要 @ 987654325@

    不幸的是,这种方法是否有效还取决于上下文。据我测试,它适用于聚合和脚本字段,但不适用于脚本查询。

    最后,注意“参数”_source是一种自动参数,你的params下面不需要指定任何东西

    郑重声明:我知道我迟到了,但我自己偶然发现了这个问题,答案可能对仍在寻找的其他人有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2021-02-01
      • 1970-01-01
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多