使用基数但试图用它找到总长度

Using Cardinality but trying to find total length with it

我一直在使用基数来查找一些独特的字段,例如作者

    "aggs": {
       "author_count" : {
        "cardinality" : {
            "field" : "author"
        }
       }
   }

这有效并计算其中具有唯一作者的所有作者字段。

现在我想找出这些唯一作者的总规模。对于其他查询,我只是通过添加

来完成此操作
  "aggs":{
    "sum":{
      "field" : "length" }}}

但是当我尝试这个时,它会给我所有内容的总长度,而不仅仅是针对独特的作者。

因此,例如,如果字段 author 仅包含一个 "Kim",则应返回此字段。 我希望每个只写过一本书的作者也把他们所有的页数加在一起。

例如

"author" : "kim",
"length": 100

"author" : "lolo",
"length": 100

输出应该是author_count 2total_length 200

但是

"author" : "kim",
"length": 100

"author" : "lolo",
"length": 100

"author" : "lolo",
"length": 100

输出应该是author_count 1total_length 100。因为kim是唯一位唯一作者(只写过一本书的作者)

有什么想法吗?

理解问题后,可以实现 bucket selector aggregation and sum bucket aggregation. First terms aggregation on author field will give all the unique authors, then value count aggregation 将赠送这些独特作者所写的书籍。 total_sum 总页数。

现在桶选择器将只保留那些只写过一本书的作者的桶,最后 sum_bucket 总结这些作者的所有长度

{
  "size": 0,
  "aggs": {
    "unique_author": {
      "terms": {
        "field": "author",
        "size": 100
      },
      "aggs": {
        "total_book_count": {
          "value_count": {
            "field": "author"
          }
        },
        "total_sum": {
          "sum": {
            "field": "length"
          }
        },
        "only_single_book_author": {
          "bucket_selector": {
            "buckets_path": {
              "total_books": "total_book_count"
            },
            "script": "total_books==1"
          }
        }
      }
    },
    "page_length": {
      "sum_bucket": {
        "buckets_path": "unique_author>total_sum"
      }
    }
  }
}