ES集約クエリーフィールドによるグループ化

2731 ワード

Es集約クエリーを使用してフィールドに基づいてグループ化すると、状況が検出されます.
//   where   
BoolQueryBuilder qbs = QueryBuilders.boolQuery();

QueryBuilder qb1 = QueryBuilders.rangeQuery("create_date").from("2018-07-01 00:00:00").to("2018-08-23 00:00:00").includeLower(true).includeUpper(true);
BoolQueryBuilder qbs1 = QueryBuilders.boolQuery().must(qb1);
qbs.must(qbs1);

SearchRequestBuilder requestBuilder = client.prepareSearch("user_login_detail")
                    .setTypes("login_detail");
requestBuilder.setQuery(qbs);

requestBuilder.setFrom(0);
requestBuilder.setSize(1000000);

GroupBy groupBy = new GroupBy(requestBuilder, "count_name", "user_name", true);
groupBy.addCountAgg("count_name", "user_name");
Map groupbyResponse = groupBy.getGroupbyResponse();
for (Map.Entry entry : groupbyResponse.entrySet()) {
    String bucketKey = entry.getKey(); 
}

上はユーザーの登録フローを照会し、100万のデータを照会してグループ化し、表データ4000 W+今回のグループ実行時間は38 sで、setSize属性を除いた後の実行時間は1.8 sである.sizeプロパティを追加するとesはクエリーのデータに基づいてグループ化され、グループ化後、クエリーのデータが結果セットとして返されます.sizeのプロパティを設定しない場合、esはデフォルトで集約された結果セットのみが返され、データ量が大幅に減少するため効率が向上します.