Aggregations sum の doc_count_error_upper_bound について

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

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

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

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

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の値を確認することもできますが、そちらにも同様の問題が付きまといます。
何れにせよ、集計するデータ量と計算負荷のトレードオフは避けられません。

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

1 Like

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

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

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

1 Like

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

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

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