需求說明:
文檔中存在字段year(年),volume(卷),issue(期)三個字段,現(xiàn)有需求如下:需要先根據(jù)year進(jìn)行聚合并且降序,然后根據(jù)volume字段在年聚合后再次聚合,issue字段則在以上兩字段的聚合后再次聚合,效果圖如下:
DSL查詢語句
{
"from": 0,
"size": 10,
"aggregations": {
"year": {
"terms": {
"field": "year", //指定根據(jù)year聚合
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": {
"_key": "desc" //根據(jù)year降序排序
}
},
"aggregations": { //子聚合
"volume": {
"terms": {
"field": "volume", //指定根據(jù)volume聚合
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": {
"_key": "desc" //根據(jù)volume降序排序
}
},
"aggregations": { //子聚合
"issue": {
"terms": {
"field": "issue", //指定根據(jù)issue聚合
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": {
"_key": "desc" //根據(jù)issue降序排序
}
}
}
}
}
}
}
}
}
檢索結(jié)果:
SpringDataElasticSearch語句實現(xiàn)
nativeSearchQueryBuilder.addAggregation(AggregationBuilders.terms("year").field("year").order(BucketOrder.key(false))
.subAggregation(AggregationBuilders.terms("volume").field("volume").order(BucketOrder.key(false))
.subAggregation(AggregationBuilders.terms("issue").field("issue").order(BucketOrder.key(false))))
);
實現(xiàn)效果:
關(guān)于子聚合的官方文檔
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-children-aggregation.html文章來源:http://www.zghlxwxcb.cn/news/detail-562438.html
相關(guān)文檔:https://blog.csdn.net/donghaixiaolongwang/article/details/58597058文章來源地址http://www.zghlxwxcb.cn/news/detail-562438.html
到了這里,關(guān)于Elasticsearch的子聚合查詢和使用SpringDataElasticSearch如何實現(xiàn)三級的子查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!