2017-04-11 25 views
3

私はElasticsearch 5.3を使用しています。私はいくつかのデータを集計していますが、その結果は単一のクエリーに戻すにはあまりにも多すぎます。私はsize = Integer.MAX_VALUE;を使ってみましたが、それでもそれほどではないことが判明しました。 ES検索APIでは、検索結果を通じてscrollにメソッドがあります。 org.elasticsearch.search.aggregations.AggregationBuilders.termsアグリゲータにも同様の機能がありますか?どのように使用しますか?アグリゲータに検索スクロールAPIを使用できますか?Scroll on Elasticsearch集計の使い方は?

答えて

6

ES 5.3では、用語「バケット」をpartition、要求ごとに1つのパーティションを取得できます。

たとえば、以下のクエリでは、バケットを10個のパーティションに分割し、最初のパーティションのみを返すよう要求することができます。すべてのバケットを一度に取得したい場合よりも10倍少ないデータを返します。

{ 
    "size": 0, 
    "aggs": { 
     "my_terms": { 
     "terms": { 
      "field": "my_field", 
      "include": { 
       "partition": 0, 
       "num_partitions": 10 
      }, 
      "size": 10000 
     } 
     } 
    } 
} 

その後、1にし、そう

{ 
    "size": 0, 
    "aggs": { 
     "my_terms": { 
     "terms": { 
      "field": "my_field", 
      "include": { 
       "partition": 1,   <--- increase this up until partition 9 
       "num_partitions": 10 
      }, 
      "size": 10000 
     } 
     } 
    } 
} 

Javaコードでこれを追加するには、あなたはこのようにそれを行うことができます上のパーティションを増やすことで、第2の要求を行うことができます。

TermsAggregationBuilder agg = AggregationBuilders.terms("my_terms"); 
agg.includeExclude(new IncludeExclude(0, 10)); 
+0

Javaクライアントに 'partition'設定を追加するにはどうすればいいですか? – khateeb

+0

回答を更新しました – Val

+0

20個のパーティションがある場合、各パーティションに対して20回クエリを実行する必要がありますか?パーティションのサイズはどのようにして決定しますか? – khateeb

関連する問題