es 查询示例 搜索 分组 去重 分页 排序
java 语句
@Autowired
private static RestHighLevelClient client;
@PostConstruct
public void init() {
client = this.restHighLevelClient;
}
try{
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.rangeQuery("timestampStr").gte(startTime));
boolQueryBuilder.must(QueryBuilders.rangeQuery("timestampStr").lte(now));
boolQueryBuilder.must(QueryBuilders.wildcardQuery("orgCode.keyword", "**" + orgCode + "**"));
//索引
List<String> indexes = Collections.singletonList(BizConstants.VAG_DETECTION_CODE_RECORD_INDEX);
SearchRequest request = new SearchRequest(indexes.toArray(new String[indexes.size()]));
SearchSourceBuilder searchSourceBuilder = (new SearchSourceBuilder()).trackTotalHits(true);
//添加查询条件
searchSourceBuilder.query(boolQueryBuilder);
//查询的条数
searchSourceBuilder.size(1);
//根据 attributeName 分组 可以多字段分组 增加一组 .subAggregation()
TermsAggregationBuilder imsiNum = AggregationBuilders.terms("countNum").field("attributeName.keyword").size(30)
//在分组的基础上imsi 去重
.subAggregation(AggregationBuilders.cardinality("imsiNum").field("imsi.keyword"));
searchSourceBuilder.aggregation(imsiNum);
//排序
searchSourceBuilder.sort(((new FieldSortBuilder("timestampStr")).order(SortOrder.DESC)).unmappedType("long"));
//分页
searchSourceBuilder.from(0).size(2);
request.source(searchSourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
if (response.status().getStatus() == 200) {
//搜索结果
List<Aggregation> aggregations = response.getAggregations().asList();
if (CollectionUtils.isEmpty(aggregations)) {
return null;
}
Object object = aggregations.get(0);
List<? extends Terms.Bucket> buckets;
//ParsedStringTerms 查询的返回值类型 取适用结果的类型
if (object instanceof ParsedStringTerms) {
ParsedStringTerms stringTerms = (ParsedStringTerms)object;
buckets = stringTerms.getBuckets();
buckets.stream().forEach((e) -> {
//e.getKey() 为分组的值 e.getDocCount() 为分组的计数
//取去重的数值
List<Aggregation> imsiAgg = e.getAggregations().asList();
if(!CollectionUtils.isEmpty(imsiAgg) && imsiAgg.get(0) instanceof ParsedCardinality){
ParsedCardinality imsiParse = (ParsedCardinality)imsiAgg.get(0);
//imsiParse.getValue() 为去重的计数
}
});
}
}
} catch (Exception var21) {
var21.printStackTrace();
}
es搜索语句
GET vag_detection_code_record_index/_search
{
"from":0,
"size":2,
"query":{
"bool":{
"must":[
{
"range":{
"timestampStr":{
"from":1645173471,
"to":null,
"include_lower":true,
"include_upper":true,
"boost":1
}
}
},
{
"range":{
"timestampStr":{
"from":null,
"to":1645778271,
"include_lower":true,
"include_upper":true,
"boost":1
}
}
}
],
"adjust_pure_negative":true,
"boost":1
}
},
"sort":[
{
"timestampStr":{
"order":"desc",
"unmapped_type":"long"
}
}
],
"track_total_hits":2147483647,
"aggregations":{
"countNum":{
"terms":{
"field":"attributeName.keyword",
"size":3,
"min_doc_count":1,
"shard_min_doc_count":0,
"show_term_doc_count_error":false,
"order":[
{
"_count":"desc"
},
{
"_key":"asc"
}
]
},
"aggregations":{
"imsiNum": {
"cardinality": {
"field": "imsi.keyword"
}
}
}
}
}
}
es搜索结果
{
"took" : 236,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1226108,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "vag_detection_code_record_index",
"_type" : "_doc",
"_id" : "39736326",
"_score" : null,
"_source" : {
"orgCode" : "431003002004",
"attributeName" : "湖南 郴州",
"id" : 39736326,
"timestamp" : 1645778271,
"genericClass" : "class java.lang.Long",
"threeUpdateTime" : null,
"updateTime" : null,
"timestampStr" : 1645778271
},
"sort" : [
1645778271
]
},
{
"_index" : "vag_detection_code_record_index",
"_type" : "_doc",
"_id" : "39736325",
"_score" : null,
"_source" : {
"imsi" : "460002502631473",
"attributeName" : "湖南 郴州",
"id" : 39736325,
"timestamp" : 1645778270,
"genericClass" : "class java.lang.Long",
"cameraId" : 740921880386469919,
"createTime" : "2022-02-25T16:34:23.022Z",
"crossingId" : "4310030006",
"timestampStr" : 1645778270
},
"sort" : [
1645778270
]
}
]
},
"aggregations" : {
"countNum" : {
"doc_count_error_upper_bound" : 13975,
"sum_other_doc_count" : 551580,
"buckets" : [
{
"key" : "湖南 郴州",
"doc_count" : 544313,
"imsiNum" : {
"value" : 54835
}
},
{
"key" : "",
"doc_count" : 80852,
"imsiNum" : {
"value" : 9450
}
},
{
"key" : "北京",
"doc_count" : 49363,
"imsiNum" : {
"value" : 6689
}
}
]
}
}
}