es 聚合统计
最新项目做ES 统计 就分享一下:直接上代码/*** 根据门类名称来分组统计 ,同时根据时间段获取数据*/@Overridepublic List<Map> esTjByMl(EsSearchDto esSearchDto) {List<Map> returnResult = new ArrayList<>();String index = esSearchDt
·
最新项目做ES 统计 就分享一下:
直接上代码
修改完善了下,1.统计数据只取10条分页问题,数据查询只取10000条问题
需要将es 修改下:
da/_settings/put
{"max_result_window":200000000}
// 高级检索,根据字段来搜索
@Override
public Page<DaDab> esByParam(EsSearchDto esSearchDto) {
String index = esSearchDto.getIndex();
List<Map<String, Object>> list = new ArrayList<>();
Page<DaDab> DaDabPage = new Page<>();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
List<Integer> mlids = esSearchDto.getMlids();
//保存期限
String bcqx = esSearchDto.getBcqx();
//创建时间
String cjsj = esSearchDto.getCjsj();
//部门
Integer deptId = esSearchDto.getDeptId();
//档案密级
String damj = esSearchDto.getDamj();
//归档时间
String gdsj = esSearchDto.getGdsj();
List<String> dabhs = esSearchDto.getDabhs();
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder);
//保存期限
if (StringUtils.isNotBlank(bcqx)) {
boolQueryBuilder.must(QueryBuilders.termQuery("bcqx.keyword", bcqx));
}
// cjsj (2021-01-01)
if (StringUtils.isNotBlank(cjsj)) {
String from = cjsj + " 00:00:00";
String to = cjsj + " 23:59:59";
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj.keyword").gte(from).lte(to);
boolQueryBuilder.must(rangequerybuilder);
}
// deptId
if (deptId != null) {
boolQueryBuilder.must(QueryBuilders.termQuery("deptId", deptId));
}
// damj
if (StringUtils.isNotBlank(damj)) {
boolQueryBuilder.must(QueryBuilders.termQuery("damj.keyword", damj));
}
// gdsj 因为归档时间存的是 long 格式 所以需要转化
if (StringUtils.isNotBlank(gdsj)) {
// long time = DateUtil.parse(gdsj).getTime();
// boolQueryBuilder.must(QueryBuilders.termQuery("gdsj", time));
String from = gdsj + " 00:00:00";
String to = gdsj + " 23:59:59";
long ftime = DateUtil.parse(from).getTime();
long ttime = DateUtil.parse(to).getTime();
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("gdsj").gte(ftime).lte(ttime);
boolQueryBuilder.must(rangequerybuilder);
}
if (mlids != null && mlids.size() > 0) {
BoolQueryBuilder mlboolQueryBuilder = boolQuery();
// 精致查询
mlids.forEach(mlid ->{
mlboolQueryBuilder.should(QueryBuilders.termQuery("mlid.keyword", mlid));
});
boolQueryBuilder.must(mlboolQueryBuilder);
}
if (dabhs != null && dabhs.size() > 0) {
BoolQueryBuilder dabhboolQB = boolQuery();
// 精致查询
dabhs.forEach(dabh ->{
dabhboolQB.should(QueryBuilders.termQuery("dabh.keyword", dabh));
});
boolQueryBuilder.must(dabhboolQB);
}
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
Integer offset = (esSearchDto.getPageNo() - 1) * esSearchDto.getPageSize();
searchSourceBuilder.from(offset);
searchSourceBuilder.size(esSearchDto.getPageSize());
searchSourceBuilder.trackTotalHits(true);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse search = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
// 获取检索结果总数
int count = (int) hits.getTotalHits().value;
DaDabPage.setTotal(count);
if (count != 0) {
for (SearchHit hit : hits.getHits()) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
list.add(sourceAsMap);
}
}
} catch (IOException e) {
e.printStackTrace();
}
DaDabPage.setRecords(formatBean(list));
return DaDabPage;
}
@Override
public List<Map> esTjByBcqxAndMl(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
//保存期限
if (StringUtils.isNotBlank(esSearchDto.getBcqx())) {
// 精准查询
TermQueryBuilder termQueryBuilder2 = QueryBuilders.termQuery("bcqx", esSearchDto.getBcqx());
boolQueryBuilder.must(termQueryBuilder2);
}
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
// 解决统计分页问题,取100条 可以设置更大
TermsAggregationBuilder termsBuilder2 = AggregationBuilders.terms("bcqxsum").field("bcqxmc.keyword").size(100);
TermsAggregationBuilder termsBuilder1 = AggregationBuilders.terms("mlsum").field("mlmc.keyword").size(100);
termsBuilder2.subAggregation(termsBuilder1);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("bcqxsum");
for (Terms.Bucket buck : terms.getBuckets()) {
String bcqxmc = buck.getKeyAsString();
Terms mlsum = buck.getAggregations().get("mlsum");
for (Terms.Bucket mlbuck : mlsum.getBuckets()) {
HashMap<String, Object> map = new HashMap<>(16);
String mlmc = mlbuck.getKeyAsString();
long num = mlbuck.getDocCount();
map.put("bcqxmc", bcqxmc);
map.put("mlmc", mlmc);
map.put("num", num);
list.add(map);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esDaTjByGdsjAndMl(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
DateHistogramAggregationBuilder termsBuilder2 = AggregationBuilders.dateHistogram("gdsjsum")
.field("gdsj").dateHistogramInterval(DateHistogramInterval.YEAR);
//termsBuilder2.format("yyyy");
TermsAggregationBuilder termsBuilder1 = AggregationBuilders.terms("mlsum").field("mlmc.keyword").size(100);
termsBuilder2.subAggregation(termsBuilder1);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Histogram terms = response.getAggregations().get("gdsjsum");
for (Histogram.Bucket buck : terms.getBuckets()) {
String gdsj = buck.getKeyAsString();
DateTime time = DateUtil.date(new Long(gdsj));
Terms mlsum = buck.getAggregations().get("mlsum");
for (Terms.Bucket mlbuck : mlsum.getBuckets()) {
HashMap<String, Object> map = new HashMap<>(16);
String mlmc = mlbuck.getKeyAsString();
long num = mlbuck.getDocCount();
map.put("year", time.year());
map.put("mlmc", mlmc);
map.put("num", num);
list.add(map);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esDaTjByGdsj(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
DateHistogramAggregationBuilder termsBuilder2 = AggregationBuilders.dateHistogram("gdsjsum")
.field("gdsj").dateHistogramInterval(DateHistogramInterval.YEAR);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Histogram terms = (Histogram) response.getAggregations().get("gdsjsum");
for (Histogram.Bucket buck : terms.getBuckets()) {
String gdsj = buck.getKeyAsString();
DateTime time = DateUtil.date(new Long(gdsj));
HashMap<String, Object> map = new HashMap<>(16);
long num = buck.getDocCount();
map.put("year", time.year());
map.put("num", num);
list.add(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esYwgsTjByMl(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
//保存期限
if (StringUtils.isNotBlank(esSearchDto.getYwgs())) {
// 精准查询
TermQueryBuilder termQueryBuilder2 = QueryBuilders.termQuery("ywgs", esSearchDto.getYwgs());
boolQueryBuilder.must(termQueryBuilder2);
}
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
TermsAggregationBuilder termsBuilder2 = AggregationBuilders.terms("ywgssum").field("ywgs.keyword").size(100);
TermsAggregationBuilder termsBuilder1 = AggregationBuilders.terms("mlsum").field("mlmc.keyword").size(100);
termsBuilder2.subAggregation(termsBuilder1);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("ywgssum");
for (Terms.Bucket buck : terms.getBuckets()) {
String ywgs = buck.getKeyAsString();
Terms mlsum = buck.getAggregations().get("mlsum");
for (Terms.Bucket mlbuck : mlsum.getBuckets()) {
HashMap<String, Object> map = new HashMap<>(16);
String mlmc = mlbuck.getKeyAsString();
long num = mlbuck.getDocCount();
map.put("ywgs", ywgs);
map.put("mlmc", mlmc);
map.put("num", num);
list.add(map);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esdagdTjByMl(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder1 = QueryBuilders.termQuery("sfsc", 0);
TermQueryBuilder termQueryBuilder2 = QueryBuilders.termQuery("dazt", 10);
boolQueryBuilder.must(termQueryBuilder1);
boolQueryBuilder.must(termQueryBuilder2);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("mlmc.keyword").size(100);
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
searchSourceBuilder.aggregation(termsBuilder);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("sum");
for (int i = 0; i < terms.getBuckets().size(); i++) {
HashMap<String, Object> map = new HashMap<>(16);
// mlmc
String mlmc = terms.getBuckets().get(i).getKey().toString();
//数量
Long sum = terms.getBuckets().get(i).getDocCount();
map.put("mlmc", mlmc);
map.put("num", sum.intValue());
list.add(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esDaTjByCjrAndMl(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder1 = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder1);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
if (StringUtils.isNotBlank(esSearchDto.getCjrmc())) {
boolQueryBuilder.must(QueryBuilders.termQuery("cjrmc.keyword", esSearchDto.getCjrmc()));
}
TermsAggregationBuilder termsBuilder2 = AggregationBuilders.terms("cjrsum").field("cjrmc.keyword").size(999);
TermsAggregationBuilder termsBuilder1 = AggregationBuilders.terms("mlsum").field("mlmc.keyword").size(999);
termsBuilder2.subAggregation(termsBuilder1);
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("cjrsum");
for (Terms.Bucket buck : terms.getBuckets()) {
String cjr = buck.getKeyAsString();
Terms mlsum = buck.getAggregations().get("mlsum");
for (Terms.Bucket mlbuck : mlsum.getBuckets()) {
HashMap<String, Object> map = new HashMap<>(16);
String mlmc = mlbuck.getKeyAsString();
long num = mlbuck.getDocCount();
map.put("cjr", cjr);
map.put("mlmc", mlmc);
map.put("num", num);
list.add(map);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esDaTjByCjr(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder1 = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder1);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
TermsAggregationBuilder termsBuilder2 = AggregationBuilders.terms("cjrsum").field("cjrmc.keyword").size(999);
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("cjrsum");
for (Terms.Bucket buck : terms.getBuckets()) {
String cjr = buck.getKeyAsString();
HashMap<String, Object> map = new HashMap<>(16);
long num = buck.getDocCount();
map.put("cjr", cjr);
map.put("num", num);
list.add(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<String> esDaByZt(String dazt) {
List<String> list = new ArrayList<>();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices("da");
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
boolQueryBuilder.must(QueryBuilders.termQuery("sfsc", 0))
.must(QueryBuilders.termQuery("dazt", Integer.parseInt(dazt)));
searchSourceBuilder.fetchSource("dabh","");
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.trackTotalHits(true);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
// 执行搜索
request.source(searchSourceBuilder);
SearchResponse search = client.search(request, RequestOptions.DEFAULT);
SearchHits hits = search.getHits();
// 获取检索结果总数
int count = (int) hits.getTotalHits().value;
if (count != 0) {
for (SearchHit hit : hits.getHits()) {
String sourceAsMap = hit.getSourceAsString();
list.add(sourceAsMap);
}
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esDaTjByYwgs(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder1 = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder1);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("ywgs.keyword").size(100);
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
searchSourceBuilder.aggregation(termsBuilder);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("sum");
for (int i = 0; i < terms.getBuckets().size(); i++) {
HashMap<String, Object> map = new HashMap<>(16);
// ywgs
String ywgs = terms.getBuckets().get(i).getKey().toString();
//数量
Long sum = terms.getBuckets().get(i).getDocCount();
map.put("ywgs", ywgs);
map.put("num", sum.intValue());
list.add(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
public List<Map> esTjByBcqx(EsSearchDto esSearchDto) {
List<Map> list = new ArrayList<>();
String index = esSearchDto.getIndex();
try {
SearchRequest request = new SearchRequest();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
request.indices(index);
// 多字段模糊条件
BoolQueryBuilder boolQueryBuilder = boolQuery();
// 必须条件 精准查询
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("sfsc", 0);
boolQueryBuilder.must(termQueryBuilder);
//开始结束时间
if (StrUtil.isNotEmpty(esSearchDto.getStartTime()) && StrUtil.isNotEmpty(esSearchDto.getEndTime())) {
RangeQueryBuilder rangequerybuilder = QueryBuilders
//传入时间,目标格式2020-01-02T03:17:37.638Z
.rangeQuery("cjsj")
.from(esSearchDto.getStartTime()).to(esSearchDto.getEndTime());
boolQueryBuilder.must(rangequerybuilder);
}
searchSourceBuilder.query(boolQueryBuilder);
searchSourceBuilder.timeout(new TimeValue(10, TimeUnit.SECONDS));
TermsAggregationBuilder termsBuilder2 = AggregationBuilders.terms("bcqxsum").field("bcqxmc.keyword").size(100);
searchSourceBuilder.aggregation(termsBuilder2);
// 执行搜索
request.source(searchSourceBuilder);
// client执行
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 获取统计后数据
Terms terms = response.getAggregations().get("bcqxsum");
for (Terms.Bucket buck : terms.getBuckets()) {
HashMap<String, Object> map = new HashMap<>(16);
String bcqxmc = buck.getKeyAsString();
long num = buck.getDocCount();
map.put("bcqxmc", bcqxmc);
map.put("num", num);
list.add(map);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
更多推荐
已为社区贡献2条内容
所有评论(0)