//获取最近时间的一条数据
TopHitsAggregationBuilder maxTime = AggregationBuilders.topHits(maxField).sort(maxField, SortOrder.DESC).size(1);
        //根据groupField分组
        TermsAggregationBuilder termsAggregationBuilder =

//首先是分组                AggregationBuilders.terms(groupField).field(groupField).subAggregation(maxTime).
                        size(10000);

//获取最大的时间为了排序去做的聚合
        MaxAggregationBuilder field = AggregationBuilders.max("maxSort").field("msgSendTime");
        termsAggregationBuilder.subAggregation(field);

//这个地方的排序必须要用 一个number类型的聚合去排序
        FieldSortBuilder fieldSortBuilder=new FieldSortBuilder("maxSort").order(SortOrder.DESC);
        termsAggregationBuilder.subAggregation(new BucketSortPipelineAggregationBuilder("pageAndSort",
                Lists.newArrayList(fieldSortBuilder)).from(msgListReqDTO.getStartIndex()).size(msgListReqDTO.getPageSize()));
        //设置 searchQuery
        searchSourceBuilder.query(boolQueryBuilder).aggregation(termsAggregationBuilder).
                sort(maxField, SortOrder.DESC).size(0);

        request.searchType(SearchType.DEFAULT).source(searchSourceBuilder);
GET intelligent-core_message_es_index/_search
{
	"size": 0,
	"query": {
		"bool": {
			"must": [{
				"match": {
					"sessionStatus": {
						"query": "END"
					}
				}
			}, {
				"match": {
					"userId": {
						"query": "20220822151440349572086684327936"
					}
				}
			}],
			"must_not": [{
				"match": {
					"sendRole": {
						"query": "SYSTEM_VISITOR"
					}
				}
			}, {
				"terms": {
					"sendRole": ["SYSTEM_VISITOR", "SYSTEM_USER"]
				}
			}],
			"adjust_pure_negative": true,
			"boost": 1.0
		}
	},
	"sort": [{
		"msgSendTime": {
			"order": "desc"
		}
	}],
	"aggregations": {
		"visitorId": {
			"terms": {
				"field": "visitorId",
				"size": 10000,
				"order": [{
					"_count": "desc"
				}, {
					"_key": "asc"
				}]
			},
			"aggregations": {
				"msgSendTime": {
					"top_hits": {
						"from": 0,
						"size": 1,
						"sort": [{
							"msgSendTime": {
								"order": "desc"
							}
						}]
					}
				},
				"maxSort": {
					"max": {
						"field": "msgSendTime"
					}
				},
				"pageAndSort": {
					"bucket_sort": {
						"sort": [{
							"maxSort": {
								"order": "desc"
							}
						}],
						"from": 15,
						"size": 5
					}
				}
			}
		}
	}
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐