【问题标题】:Count number of inner elements of array property (Including repeated values)计算数组属性的内部元素个数(包括重复值)
【发布时间】:2021-12-13 04:06:15
【问题描述】:

鉴于我有以下记录。

[
    {
        "profile": "123",
        "inner": [
            {
                "name": "John"
            }
        ]
    },
    {
        "profile": "456",
        "inner": [
            {
                "name": "John"
            },
            {
                "name": "John"
            },
            {
                "name": "James"
            }
        ]
    }
]

我想得到类似的东西:

"aggregations": {
    "name": {
        "buckets": [
            {
                "key": "John",
                "doc_count": 3
            },
            {
                "key": "James",
                "doc_count": 1
            }
        ]
    }
}

我是使用 Elasticsearch 的初学者,这似乎是一个非常简单的操作,但我找不到如何实现这一点。
如果我使用 term 尝试一个简单的 aggs,它会为 John 返回 2,而不是 3。 我正在尝试的示例请求:

{
  "size": 0,
  "aggs": {
    "name": {
      "terms": {
        "field": "inner.name"
      }
    }
  }
}

我怎样才能做到这一点?
附加信息:稍后将在 Kibana 上使用。 我可以将映射更改为任何我想要的,但 AFAIK Kibana 不喜欢“嵌套”类型。 :(

【问题讨论】:

    标签: elasticsearch kibana elastic-stack


    【解决方案1】:

    你需要做一个value_count聚合,默认情况下terms只做一个doc_count,但是value_count聚合会计算给定字段存在的次数。

    所以,为了你的目的:

    {
      "size": 0,
      "aggs": {
        "name": {
          "terms": {
            "field": "inner.name"
          },
          "aggs": {
            "total": {
              "value_count": {
                "field": "inner.name"
              }
            }
          }
        }
      }
    }
    

    返回:

    "aggregations" : {
        "name" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "John",
              "doc_count" : 2,
              "total" : {
                "value" : 3
              }
            },
            {
              "key" : "James",
              "doc_count" : 1,
              "total" : {
                "value" : 2
              }
            }
          ]
        }
      }
    

    【讨论】:

    • 谢谢,效果很好。你有没有机会知道我怎样才能在 Kibana 图表中实现这一点?
    • 这似乎是一个不同的问题。这取决于可视化效果,我不是 100% 你想要的可视化效果。
    • 它实际上是一个数据表,只是为了在其他所有内容的同一仪表板中按名称计数。是的,我知道这应该是另一个问题。很抱歉造成混乱。
    猜你喜欢
    • 2020-11-12
    • 2019-08-21
    • 2015-01-12
    • 2016-03-24
    • 1970-01-01
    • 2017-06-19
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多