计算重复发生的频率

dle*_*ech 5 distinct aggregation elasticsearch

在 Elasticsearch 中,我试图计算数据集中不同字段值的数量,其中字段值:

  • 只出现一次。
  • 出现两次或以上。

从某种意义上说,我试图计算重复发生的频率。我怎样才能做到这一点?

例子

假设我有以下 Elasticsearch 文档:

{ "myfield": "bob" }
{ "myfield": "bob" }
{ "myfield": "alice" }
{ "myfield": "eve" }
{ "myfield": "mallory" }
Run Code Online (Sandbox Code Playgroud)

由于“alice”、“eve”和“mallory”出现一次,而“bob”出现两次,我预计:

number_of_values_that_appear_once: 3
number_of_values_that_appear_twice_or_more: 1
Run Code Online (Sandbox Code Playgroud)

我可以通过术语聚合并查看doc_count每个存储桶的部分方式。术语聚合的输出myfield如下所示:

"buckets": [
  {
    "key": "bob",
    "doc_count": 3
  },
  {
    "key": "alice",
    "doc_count": 1
  },
  ...
]
Run Code Online (Sandbox Code Playgroud)

doc_count == 1例如,从这个输出中,我可以对桶的数量进行求和。但这无法扩展,因为我经常有数千个不同的值,因此遗愿清单将是巨大的。

Igo*_*elo 0

聚合会受到查询的影响,因此,如果您想查找重复项,只需运行以下查询:

{
  "size": 0,
  "query": {
    "match_all": {}
  },
  "aggregations": {
    "YOUR_AGGREGATION_NAME": {
      "terms": {
        "field": "myfield"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ps1:该size键仅省略结果/点击数(总数除外)。

ps2:query关键是匹配索引中的所有文档。