Elasticsearch:每月获得顶级嵌套文档,没有顶级重复项

时间:2017-10-18 07:39:55

标签: elasticsearch elasticsearch-5 kibana-5

我有一些基于时间的嵌套数据,我希望每月plugins获得最大的正面和负面变化。我使用Elasticsearch 5.3(和Kibana 5.3)。

文件结构如下:

   {
       _id: "xxx",
       @timestamp: 1508244365987,
       siteURL: "www.foo.bar",
       plugins: [
           {
               name: "foo",
               version: "3.1.4"
           },
           {
               name: "baz",
               version: "13.37"
           }
      ]
   }

但是,根据id(siteURL),我每月有多个条目,我想只使用最新的每次桶,以避免不公平的称量。 我试图通过使用以下聚合来解决这个问题:

{
  "aggs": {
    "normal_dates": {
      "date_range": {
        "field": "@timestamp",
        "ranges": [
          {
            "from": "now-1y/d",
            "to": "now"
          }
        ]
      },
      "aggs": {
        "date_histo": {
          "date_histogram": {
          "field": "@timestamp",
          "interval": "month"
        },
        "aggs": {
          "top_sites": {
            "terms": {
              "field": "siteURL.keyword",
              "size": 50000
              },
            "aggs": {
              "top_plugin_hits": {
                "top_hits": {
                  "sort": [
                    {
                      "@timestamp": {
                        "order": "desc"
                      }
                    }
                  ],
                  "_source": {
                    "includes": [
                      "plugins.name"
                    ]
                  },
                  "size": 1
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

现在我每个月都会得到最新的网站及其插件。接下来我想把数据翻出来,每个月都有插件和事件的计数。然后我会使用serial_diff比较几个月。

但是,我不知道如何从聚合转到串行差异,即将数据翻出来。

欢迎任何帮助

PS:如果我可以在Kibana 5.3表格中获得它,我将获得额外的荣誉......

1 个答案:

答案 0 :(得分:0)

事实证明,无法进一步聚合top_hits查询。

我最终将发布的查询结果加载到Python中,并使用Python进行进一步处理和可视化。