ElasticsearchでAggregationsを使って集計処理を行っていたところ、どうも件数が少なかった。 で調べてみたところ、どうやら抽出結果と同じくこちらもデフォルトでは10件までしか取得できないらしい。

で、集計結果を10件以上取得するにはどうすれば良いのかなと調べてみたところ、どうやらクエリ内でサイズを指定して、そこから取得する必要があるようだ。上限は10,000件らしい。

    s_base_query = {
        'query':{'bool':{'must':[],'should':[]}},
        'size': 0,
        'aggs':{'count':{
            'terms':{'field':'service','size':10000},
            'aggs':{
                'd_count':{'terms':{'field':'method'}}
                }
            }}
        }

あまりないと思うけど、集計件数が10,000超えた場合とか、通信量が大きすぎて一度に取ってこれなかった場合だとどうするのだろうか…?少し調べた限りだとscrollでは取ってこれないらしく、一度に取ってこれないほどの量になったらpartitionで分割して取ってくるという方法が一般的なようだ。


参考