elasticsearch ElasticSearch:在字段键上聚合,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch ElasticSearch:在字段键上聚合,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch ElasticSearch:在字段键上聚合

elasticsearch ElasticSearch:在字段键上聚合,elasticsearch,kibana,elasticsearch,Kibana,我正试图在Kibana中创建一个与我的网站中最流行的页面相关的小仪表板。文件以以下格式存储: { "ev": "pageview", "meta": { "visitor": "blah", "pages": { "/my-route": { "title": "My route", "desc": "foo bar" }, "/my-route#2": {

我正试图在Kibana中创建一个与我的网站中最流行的页面相关的小仪表板。文件以以下格式存储:

{
    "ev": "pageview",
    "meta": {
      "visitor": "blah",
      "pages": {
        "/my-route": {
          "title": "My route",
          "desc": "foo bar"
        },
        "/my-route#2": {
          "title": "My route 2"
          "desc": "foo bar"
        },
      }
    }
}
因此,我试图创建一个表来显示:

Page     Views
/foo     10
/foo#2   10
/bar     5

但是,我似乎无法基于对象的键进行聚合。可能吗

我认为,您的数据结构将给您带来困难,让您无法完成所要做的事情

我建议您将其更改为:

{
    "ev": "pageview",
    "visitor" :"blah",
    "route": "/my-route",
    "title":"My route",
    "desc" foo bar"
}
除了您需要的任何其他映射之外,ev、访客和路线的“关键字”映射类型

然后你可以这样聚合:

GET /{YOUR_INDEX}/_search
{
  "query": {"match_all": {}},
  "aggs": {
    "page_views": {
      "terms": {
        "field": "route",
        "size": 100
      }
    }
  }
}
上述聚合将基于每个基数“route”值的计数返回前100个计数页

如果可能的话,使用当前的结构进行操作需要一些非常有趣的脚本


编辑*我想指出的是,我假设您希望在遵循您的结构的所有文档中进行聚合。如果您只是根据嵌套对象在单个文档中查找计数,可能有一种方法。

不幸的是,我无法更改数据结构。而且,每个视图可以包含多个页面。这个建议对我来说似乎是正确的。每个视图可以包含多个页面并不重要——它们只会映射到多个文档。如果你不能改变数据结构,你能保持一个单独的索引,用新的文档定期更新吗?我认为你所要求的实际上是不可能的。你们有多少条路线?他们事先知道吗?如果是这样,您可以使用过滤器聚合。这并不理想(因为您必须手动写出所有路由),但它会起作用。