ElasticSearch学習ノート:集約(Aggregation)-Top Hits
4813 ワード
本カタログ
1機能概要
2使用例
(1)シーンの例:
(2)ESクエリの例:
(3)Javaクエリの例:
3関連記事
公式ドキュメント
1機能概要
集約すると、各集約Bucketには、指定された順序の最初のN個のデータのみが返されます.
2使用例
(1)シーンの例:
ESライブラリにはメンバーデータが格納されており、各メンバーには独自の番号ID、所属チームID、個人スコアなどのデータがある:id,team_id, score, age...
チームIDリストのセットを指定:team_id IN (1, 5, 7)
各チームで最も得点が高い2人の番号IDを問い合わせる.
(2)ESクエリの例:
(3)Javaクエリの例:
TransportClientバージョンの例:
RestHighLevelClientの例:
SearchResponse解析の例:
3関連記事
『ElasticSearch学習ノート:常用内容』
『ElasticSearch学習ノート:Multi Search』
『ElasticSearch学習ノート:Mapping』
『ElasticSearch学習ノート:Reindex』
公式ドキュメント
ElasticSearch Top Hits Aggregation
1機能概要
2使用例
(1)シーンの例:
(2)ESクエリの例:
(3)Javaクエリの例:
3関連記事
公式ドキュメント
1機能概要
集約すると、各集約Bucketには、指定された順序の最初のN個のデータのみが返されます.
2使用例
(1)シーンの例:
ESライブラリにはメンバーデータが格納されており、各メンバーには独自の番号ID、所属チームID、個人スコアなどのデータがある:id,team_id, score, age...
チームIDリストのセットを指定:team_id IN (1, 5, 7)
各チームで最も得点が高い2人の番号IDを問い合わせる.
(2)ESクエリの例:
GET .../_search?routing=xxx // , 。
{
"size": 0, // , 。
"query": {
"bool": {
"filter": [ // , 。
{
"terms": {
"team_id": [
1,
5,
7
]
}
}
]
}
},
"aggs": {
"group_aggs": { // : team_id Bucket。
"terms": {
"field": "team_id",
"execution_hint": "map" // , map 。
},
"aggs": {
"top_score_member": { // : Bucket , top_hits 。
"top_hits": {
"size": 2, // 2
"sort": [ // score
{
"score": {
"order": "desc"
}
}
]
}
}
}
}
}
}
(3)Javaクエリの例:
TransportClientバージョンの例:
//
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.termsQuery("team_id", Lists.newArrayList(1, 3, 5)));
//
AggregationBuilder groupAggBuilder = AggregationBuilders.terms("group_aggs")
.field("team_id")
.executionHint("map"); // , map 。
AggregationBuilder topScoreAggBuilder = AggregationBuilders.topHits("top_score_member")
.sort("score", SortOrder.DESC)
.size(2);
groupAggBuilder.subAggregation(topScoreAggBuilder);
//
SearchResponse response = transportClient.prepareSearch("index_name").setTypes("type_name")
.setRouting("xxx") // , 。
.setSize(0)
.setQuery(boolQueryBuilder)
.addAggregation(groupGoodsAggBuilder)
.get();
RestHighLevelClientの例:
//
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(QueryBuilders.termsQuery("team_id", Lists.newArrayList(1, 3, 5)));
//
AggregationBuilder groupAggBuilder = AggregationBuilders.terms("group_aggs")
.field("team_id")
.executionHint("map"); // , map 。
AggregationBuilder topScoreAggBuilder = AggregationBuilders.topHits("top_score_member")
.sort("score", SortOrder.DESC)
.size(2);
groupAggBuilder.subAggregation(topScoreAggBuilder);
//
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.size(0);
searchSourceBuilder.aggregation(groupGoodsAggBuilder);
// , 。
searchSourceBuilder.timeout(new TimeValue(300));
SearchRequest request = new SearchRequest("index_name")
request.source(searchSourceBuilder);
request.setRouting("xxx") // , 。
//
SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
SearchResponse解析の例:
if (Objects.nonNull(response) && Objects.equals(response.status(), RestStatus.OK)) {
Terms groupResult = response.getAggregations().get("group_aggs");
if (Objects.nonNull(groupResult)) {
for (Terms.Bucket groupBucket : groupResult.getBuckets()) {
TopHits topScoreResult = groupBucket.getAggregations().get("top_score_member");
if (Objects.nonNull(topScoreResult) && topScoreResult.getHits().getHits().length > 0) {
SearchHit searchHit = topScoreResult.getHits().getAt(0);
MemberDTO top1Member = JSON.parseObject(searchHit.getSourceAsString(), MemberDTO.class);
SearchHit searchHit = topScoreResult.getHits().getAt(1);
MemberDTO top2Member = JSON.parseObject(searchHit.getSourceAsString(), MemberDTO.class);
//
}
}
}
}
3関連記事
『ElasticSearch学習ノート:常用内容』
『ElasticSearch学習ノート:Multi Search』
『ElasticSearch学習ノート:Mapping』
『ElasticSearch学習ノート:Reindex』
公式ドキュメント
ElasticSearch Top Hits Aggregation