使用基数,但试图用它来查找总长度

时间:2016-10-16 18:29:28

标签: elasticsearch sense

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

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

这适用于所有具有唯一作者的作者字段。

现在我想找到这些独特作者的总大小。通过其他查询,我刚刚添加了

  "aggs":{
    "sum":{
      "field" : "length" }}}

但是当我尝试这个时,它给了我所有东西的全长,而不仅仅是独特的作者。

因此,例如,如果字段作者只包含一个“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是唯一独特的作者(作者只写了一本书)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在理解了问题后,可以使用bucket selector aggregationsum bucket aggregation来实现。作者字段上的第一个术语聚合将给出所有独特的作者,然后value count aggregation将提供这些独特作者编写的书籍。 total_sum 总计页面长度。

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

{{1}}