代码之家  ›  专栏  ›  技术社区  ›  vinnylinux

ElasticSearch:按字段键聚合

  •  0
  • vinnylinux  · 技术社区  · 8 年前

    {
        "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
    

    然而,我似乎无法基于对象的键进行聚合。这可能吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Miek    8 年前

    我认为你的数据结构会给你一个困难的时间去做你想做的事情。

    我建议您将其更改为:

    {
        "ev": "pageview",
        "visitor" :"blah",
        "route": "/my-route",
        "title":"My route",
        "desc" foo bar"
    }
    

    除了您需要的任何其他映射之外,还为ev、visitor和route提供了“关键字”映射类型。

    GET /{YOUR_INDEX}/_search
    {
      "query": {"match_all": {}},
      "aggs": {
        "page_views": {
          "terms": {
            "field": "route",
            "size": 100
          }
        }
      }
    }
    

    上述聚合将基于每个基数“route”值的计数返回前100个计数页。

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