1

カーディナリティを使用して、著者などのいくつかの一意のフィールドを見つけています

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

これは機能し、一意の作成者を持つすべての作成者フィールドをカウントします。

ここで、これらのユニークな著者の合計サイズを見つけたいと思います。他のクエリでは、追加するだけでこれを実行しました

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

しかし、これを試してみると、ユニークな作者だけでなく、すべての全長がわかりました。

たとえば、フィールド author に "Kim" が 1 つしか含まれていない場合、これが返されます。私は、一冊の本しか書いておらず、すべてのページの長さを足し合わせたすべての著者を望んでいます。

例えば

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

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

出力は と にauthor_count 2なりtotal_length 200ます。

しかし、

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

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

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

出力は と にauthor_count 1なりtotal_length 100ます。キムは唯一のユニークな作家(本を一冊しか書いていない作家)だから

何か案は?

4

1 に答える 1

1

質問を理解した後、これはバケットセレクター集計合計バケット集計で実現できます。著者フィールドの最初の用語集計はすべての固有の著者を提供し、次に値カウントの集計はこれらの固有の著者が書いた本を提供します。 total_sumは、ページの長さを合計します。

現在、バケットセレクターは、1冊の本しか書いていない著者のバケットのみを保持し、最後に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"
      }
    }
  }
}
于 2016-10-16T18:36:10.130 に答える