Aggregations sum の doc_count_error_upper_bound について


#1

Aggregationsでtermsでグループ化した上でsumを使用するとデータ数によりdoc_count_error_upper_boundが0件にならず正常にsumの値を取得できない場合があります。

"terms": {"field": "category.value", "size": 200}

sizeを指定すれば取得できるようになりますが、データ数によっては処理に時間がかかったり指定したsize以上のデータが存在する可能性もあります。

確実にdoc_count_error_upper_boundを0に抑える方法はあるのでしょうか?


(Makoto Nozawa) #2

sizeに十分大きい数値を設定するのが良いです。
sizeの他にshard_sizeで制御することもできます。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_shard_size_3

あらかじめcardinality aggregationで指定すべきsizeの値を確認することもできますが、そちらにも同様の問題が付きまといます。
何れにせよ、集計するデータ量と計算負荷のトレードオフは避けられません。


(Jun Ohtani) #3

データの件数がどのくらいかがわからないですが、対象のインデックスのnumber_of_shardsを1にはできないですか?


#4

1インデックスに対してカテゴリ別(sumの対象ごと)に約10万件程度を想定しています。
インデックス全体でのデータ件数は増えていく可能性もあります。

この場合、shard数を1にしてパフォーマンス等で懸念されることはありますでしょうか?


#5

shard_sizeというのもあるのですね。いろいろ指定して試してみようと思います。
回答ありがとうございます。


(Jun Ohtani) #6

カテゴリ別ではなく、インデックス全体でどのくらいの件数かによるかと。
また、マッピングや検索のリクエストがどんな感じになるかによるので、パフォーマンスという観点では、計ってみていただくしかないかと思います。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-approximate-counts
に記載がありますが、shardが複数あるから、近似になるので、shardが1つしかなければdoc_count_error_upper_boundは必ず0です。

あと、shardに格納できる上限はこちらをご覧ください。
https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#getting-started-shards-and-replicas


(system) #7

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.