Commit bf16fa1d authored by tianbo's avatar tianbo

refactor(amos-boot-module-statistics): 重构企业统计方法并添加新功能

- 重构了企业统计查询逻辑,提高了代码复用性和可维护性 - 新增了企业监管标签和行业主管部分的统计功能 - 优化了许可状态统计的实现方式 - 调整了统计结果的数据结构,使其更加清晰和易于使用 - 引入了新的枚举类 UnitCategoryEnum 来定义单位类别
parent 0eb4bc32
package com.yeejoin.amos.boot.module.statistics.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum UnitCategoryEnum {
use("使用单位", "use"),
license("许可单位", "license");
private final String name;
private final String code;
}
......@@ -75,6 +75,7 @@ import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
......@@ -560,7 +561,114 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String orgCode = filter.getString("orgCode");
boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
JSONObject filterParams = null;
getCompanyBoolQueryBuilder(filter, boolMust);
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
String field = sort.getString("field").equals("permissionStatus") ? "licenses.expiryDate" : sort.getString("field") + ".keyword";
SortOrder sortOrder = sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC;
FieldSortBuilder sortBuilder = SortBuilders.fieldSort(field).order(sortOrder);
builder.sort(sortBuilder);
}
builder.query(boolMust);
builder.from((current - 1) * size);
builder.size(size);
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto = jsonObject.getJSONObject("sourceAsMap");
StringBuilder permissionStatus = new StringBuilder();
if (dto.containsKey("licenses")) {
JSONArray licenses = dto.getJSONArray("licenses");
if (!ObjectUtils.isEmpty(licenses)) {
List<String> permissionStatusList = new ArrayList<>();
for (Object object : licenses) {
JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(object));
String expiryDate = json.getString("expiryDate");
if (!ObjectUtils.isEmpty(expiryDate)) {
long daysBetween = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.parse(expiryDate, formatter));
if (daysBetween <= 0) {
permissionStatusList.add("超期");
} else if (daysBetween <= 30) {
permissionStatusList.add("临期");
} else {
permissionStatusList.add("正常");
}
} else {
permissionStatusList.add("无有效期");
}
}
long cq = permissionStatusList.stream().filter(e -> e.equals("超期")).count();
long lq = permissionStatusList.stream().filter(e -> e.equals("临期")).count();
long zc = permissionStatusList.stream().filter(e -> e.equals("正常")).count();
long no = permissionStatusList.stream().filter(e -> e.equals("无有效期")).count();
if (cq > 0) {
permissionStatus.append("/许可超期");
}
if (lq > 0) {
permissionStatus.append("/许可临期");
}
if (zc > 0) {
permissionStatus.append("/许可正常");
}
if (no > 0) {
permissionStatus.append("/无有效期");
}
}
} else if (!dto.containsKey("licenses") && (dto.get("unitType").toString().contains("检测单位") ||
dto.get("unitType").toString().contains("检验单位") ||
dto.get("unitType").toString().contains("制造单位") ||
dto.get("unitType").toString().contains("充装单位") ||
dto.get("unitType").toString().contains("设计单位") ||
dto.get("unitType").toString().contains("安装改造维修单位"))) {
permissionStatus.append("/无有效期");
}
String permissionStatusStr = permissionStatus.toString();
permissionStatusStr = permissionStatusStr.startsWith("/") ? permissionStatusStr.substring(1) : permissionStatusStr;
permissionStatusStr = permissionStatusStr.endsWith("/") ? permissionStatusStr.substring(0, permissionStatusStr.length() - 1) : permissionStatusStr;
dto.put("permissionStatus", permissionStatusStr);
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
page.setRecords(list);
page.setTotal(totle);
result.put("pageData", page);
} catch (IOException e) {
throw new RuntimeException(e);
}
List<Map<String, Object>> statics = new ArrayList<>();
Map<String, Object> sum = new HashMap<>();
sum.put("name", "企业总数(个)");
sum.put("value", totle);
statics.add(sum);
result.put("statics", statics);
// 获取许可状态统计
List<Map<String, Object>> staticMap = new ArrayList<>();
getCompanyOrPersonPermitStatusStatic(boolMust, staticMap, StatisticalAnalysisEnum.company.getKey());
result.put("keyIndicator", staticMap);
return result;
}
/**
* 构造企业查询条件
*
* @param filter
* @param boolMust
*/
private void getCompanyBoolQueryBuilder(JSONObject filter, BoolQueryBuilder boolMust) {
JSONObject filterParams;
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
String filterType = filter.getString("filterType");
......@@ -661,104 +769,6 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
handleAdvancedFilter(boolMust, leftGroup, rightGroup, isOrGroup);
}
}
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
String field = sort.getString("field").equals("permissionStatus") ? "licenses.expiryDate" : sort.getString("field") + ".keyword";
SortOrder sortOrder = sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC;
FieldSortBuilder sortBuilder = SortBuilders.fieldSort(field).order(sortOrder);
builder.sort(sortBuilder);
}
builder.query(boolMust);
builder.from((current - 1) * size);
builder.size(size);
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto = jsonObject.getJSONObject("sourceAsMap");
StringBuilder permissionStatus = new StringBuilder();
if (dto.containsKey("licenses")) {
JSONArray licenses = dto.getJSONArray("licenses");
if (!ObjectUtils.isEmpty(licenses)) {
List<String> permissionStatusList = new ArrayList<>();
for (Object object : licenses) {
JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(object));
String expiryDate = json.getString("expiryDate");
if (!ObjectUtils.isEmpty(expiryDate)) {
long daysBetween = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.parse(expiryDate, formatter));
if (daysBetween <= 0) {
permissionStatusList.add("超期");
} else if (daysBetween <= 30) {
permissionStatusList.add("临期");
} else {
permissionStatusList.add("正常");
}
} else {
permissionStatusList.add("无有效期");
}
}
long cq = permissionStatusList.stream().filter(e -> e.equals("超期")).count();
long lq = permissionStatusList.stream().filter(e -> e.equals("临期")).count();
long zc = permissionStatusList.stream().filter(e -> e.equals("正常")).count();
long no = permissionStatusList.stream().filter(e -> e.equals("无有效期")).count();
if (cq > 0) {
permissionStatus.append("/许可超期");
}
if (lq > 0) {
permissionStatus.append("/许可临期");
}
if (zc > 0) {
permissionStatus.append("/许可正常");
}
if (no > 0) {
permissionStatus.append("/无有效期");
}
}
} else if (!dto.containsKey("licenses") && (dto.get("unitType").toString().contains("检测单位") ||
dto.get("unitType").toString().contains("检验单位") ||
dto.get("unitType").toString().contains("制造单位") ||
dto.get("unitType").toString().contains("充装单位") ||
dto.get("unitType").toString().contains("设计单位") ||
dto.get("unitType").toString().contains("安装改造维修单位"))) {
permissionStatus.append("/无有效期");
}
String permissionStatusStr = permissionStatus.toString();
permissionStatusStr = permissionStatusStr.startsWith("/") ? permissionStatusStr.substring(1) : permissionStatusStr;
permissionStatusStr = permissionStatusStr.endsWith("/") ? permissionStatusStr.substring(0, permissionStatusStr.length() - 1) : permissionStatusStr;
dto.put("permissionStatus", permissionStatusStr);
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
page.setRecords(list);
page.setTotal(totle);
result.put("pageData", page);
} catch (IOException e) {
throw new RuntimeException(e);
}
List<Map<String, Object>> statics = new ArrayList<>();
Map<String, Object> sum = new HashMap<>();
sum.put("name", "企业总数(个)");
sum.put("value", totle);
statics.add(sum);
result.put("statics", statics);
// 获取许可状态统计
List<Map<String, Object>> staticMap = new ArrayList<>();
getCompanyOrPersonPermitStatusStatic(boolMust, staticMap, StatisticalAnalysisEnum.company.getKey());
result.put("keyIndicator", staticMap);
return result;
}
private void deleteUnitCategory(JSONObject filterParams) {
......@@ -2053,6 +2063,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
object.put("key", list.get(i).getCode());
object.put("value", list.get(i).getCode());
object.put("label", list.get(i).getName());
object.put("extendCode", list.get(i).getExtend());
result.add(object);
}
......@@ -2731,27 +2742,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
.orElse(false);
// 一级统计
if (!is2LeveFlag) {
// 计算总数
long personTotal = this.queryDpPersonStatisticsTotal(boolMust);
// 聚合查询
builder.size(0);// 不返回任何文档,只返回聚合结果
String aggName = "unit_types_split";
QueryBuilderUtils.buildSplitFieldAggCondition(builder, "unitType.keyword", "#", aggName);
builder.query(boolMust);
request.source(builder);
Map<String, Object> result = new HashMap<>();
try {
SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 解析聚合结果
Terms unitTypesTerms = searchResponse.getAggregations().get(aggName);
this.buildPersonWithCompanyTypeGroupResult(unitTypesTerms, result);
} catch (Exception e) {
throw new RuntimeException(e);
}
// 汇总总数
tabTotalMap.put(StatisticalAnalysisEnum.person.getCode(), personTotal);
return Collections.singletonList(result);
return getTotalAggMapsByUnitType(request, builder, boolMust, tabTotalMap, StatisticalAnalysisEnum.person);
} else {
// 二级统计
Map<String, Object> result = new HashMap<>();
......@@ -2767,6 +2758,30 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
private List<Map<String, Object>> getTotalAggMapsByUnitType(SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, Map<String, Object> tabTotalMap, StatisticalAnalysisEnum statisticalAnalysisEnum) {
// 计算总数
long total = this.queryDpStatisticsTotalByIndex(boolMust, statisticalAnalysisEnum.getKey());
// 聚合查询
builder.size(0);// 不返回任何文档,只返回聚合结果
String aggName = "unit_types_split";
QueryBuilderUtils.buildSplitFieldAggCondition(builder, "unitType.keyword", "#", aggName, "其他");
builder.query(boolMust);
request.source(builder);
Map<String, Object> result = new HashMap<>();
try {
SearchResponse searchResponse = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 解析聚合结果
Terms unitTypesTerms = searchResponse.getAggregations().get(aggName);
this.buildPersonWithCompanyTypeGroupResult(unitTypesTerms, result);
} catch (Exception e) {
throw new RuntimeException(e);
}
// 汇总总数
tabTotalMap.put(statisticalAnalysisEnum.getCode(), total);
return Collections.singletonList(result);
}
private void buildPersonWithCompanyTypeGroupResult(Terms unitTypesTerms, Map<String, Object> result) {
if (unitTypesTerms != null) {
for (Terms.Bucket bucket : unitTypesTerms.getBuckets()) {
......@@ -2798,9 +2813,9 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
private long queryDpPersonStatisticsTotal(BoolQueryBuilder boolMust) {
private long queryDpStatisticsTotalByIndex(BoolQueryBuilder boolMust, String index) {
CountRequest countRequest = new CountRequest();
countRequest.indices(StatisticalAnalysisEnum.person.getKey());
countRequest.indices(index);
countRequest.query(boolMust);
CountResponse countResponse;
try {
......@@ -2812,7 +2827,46 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
private List<Map<String, Object>> queryDpCompanyStatistics(JSONObject filter, SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, Map<String, Object> tabTotalMap) {
return null;
request.indices(StatisticalAnalysisEnum.company.getKey());
JSONObject filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
String unitCategory = filterParams.getString("unitCategory");
String unitType = filterParams.getJSONArray("unitType").getString(0);
// 构造企业查询条件
filter.put("filterType", "advanced");
getCompanyBoolQueryBuilder(filter, boolMust);
boolean is2LeveFlag = Optional.of(filter)
.map(obj -> obj.getJSONObject("filterParams"))
.map(filterParamsObj -> filterParamsObj.getJSONArray("unitType"))
.map(unitTypeObj -> !unitTypeObj.isEmpty())
.orElse(false);
// 一级统计
if (!is2LeveFlag) {
return getTotalAggMapsByUnitType(request, builder, boolMust, tabTotalMap, StatisticalAnalysisEnum.company);
} else {
// 二级统计
Map<String, Object> result = new HashMap<>();
// 使用单位:使用单位,个人主体 返回管控级别和所属行业
boolMust.must(QueryBuilders.matchQuery("unitType", unitType));
if (unitCategory.equals(UnitCategoryEnum.use.getCode())) {
JSONObject regulatoryLabels = this.getItemGroupStatisticsByItemName(boolMust, StatisticalAnalysisEnum.company.getKey(), "regulatoryLabelsAggName", "regulatoryLabels", this::buildRegulatoryLabelsGroupResult);
JSONObject industrySupervisor = this.getItemGroupStatisticsByItemName(boolMust, StatisticalAnalysisEnum.company.getKey(), "industrySupervisorAggName", "industrySupervisor", this::buildIndustrySupervisorGroupResult);
result.put("tabTotalMap", new JSONObject()
.fluentPut("regulatoryLabelsTotal", this.sumWithJSONObjectValues(regulatoryLabels))
.fluentPut("industrySupervisorTotal", this.sumWithJSONObjectValues(industrySupervisor)));
result.put("datas", new JSONObject()
.fluentPut("regulatoryLabels", regulatoryLabels)
.fluentPut("industrySupervisor", industrySupervisor));
} else if (unitCategory.equals(UnitCategoryEnum.license.getCode())) {// 许可单位:设计单位、制造单位、充装单位、检验机构、检查机构、安装改造维修单位
JSONObject permitStatus = getPermitStatusGroupStatistics(boolMust);
result.put("tabTotalMap", new JSONObject()
.fluentPut("permitStatusTotal", this.sumWithJSONObjectValues(permitStatus)));
result.put("datas", new JSONObject()
.fluentPut("permitStatus", permitStatus));
}
return Collections.singletonList(result);
}
}
private List<Map<String, Object>> queryDpEquipStatistics(JSONObject filter, SearchRequest request, SearchSourceBuilder builder, BoolQueryBuilder boolMust, Map<String, Object> tabTotalMap) {
......@@ -3170,7 +3224,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
searchSourceBuilder.size(0);// 不返回任何文档,只返回聚合结果
SearchRequest searchRequest = new SearchRequest();
String aggName = "personTypeGroupAgg";
QueryBuilderUtils.buildSplitFieldAggCondition(searchSourceBuilder, "postName.keyword", ",", aggName);
QueryBuilderUtils.buildSplitFieldAggCondition(searchSourceBuilder, "postName.keyword", ",", aggName, "其他");
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
try {
......@@ -3196,6 +3250,44 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return result;
}
/**
* 大屏综合统计查询接口--企业监管标签分组统计
*/
private JSONObject getItemGroupStatisticsByItemName(BoolQueryBuilder boolQuery, String indexName, String aggName, String itemName, BiConsumer<Terms, JSONObject> task) {
JSONObject result = new JSONObject();
// copy一份,避免后续两部分逻辑不一致
BoolQueryBuilder boolQueryCopy = QueryBuilderUtils.copyBoolQuery(boolQuery);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.trackTotalHits(true);
searchSourceBuilder.size(0);// 不返回任何文档,只返回聚合结果
SearchRequest searchRequest = new SearchRequest();
QueryBuilderUtils.buildSplitFieldAggCondition(searchSourceBuilder, itemName + ".keyword", ",", aggName, "其他");
searchSourceBuilder.query(boolQuery);
searchRequest.source(searchSourceBuilder);
try {
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Terms itemGroupAgg = searchResponse.getAggregations().get(aggName);
// this.buildGroupResult(itemGroupAgg, result);
task.accept(itemGroupAgg, result);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
CountRequest countRequest = new CountRequest();
countRequest.indices(indexName);
countRequest.query(boolQueryCopy);
CountResponse countResponse;
try {
countResponse = restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);
} catch (Exception exception) {
throw new RuntimeException(exception);
}
result.put("total", ObjectUtils.isEmpty(countResponse) ? 0L : countResponse.getCount());
return result;
}
private void buildPersonWithPersonTypeGroupResult(Terms personTypeGroupAgg, JSONObject result) {
result.fluentPut("zyfzr", 0L).fluentPut("aqzj", 0L).fluentPut("aqy", 0L).fluentPut("jyry", 0L).fluentPut("jcry", 0L).fluentPut("zlaqzj", 0L).fluentPut("zlaqy", 0L);
if (personTypeGroupAgg != null) {
......@@ -3224,4 +3316,100 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
}
}
}
private void buildRegulatoryLabelsGroupResult(Terms groupAgg, JSONObject result) {
if (groupAgg == null) {
return;
}
JSONArray regulatoryLabels = deployDictionary(dataDictionaryService.getByType("QYBQ"));
// 枚举遍历 + 动态匹配
for (Terms.Bucket bucket : groupAgg.getBuckets()) {
String bucketKey = bucket.getKeyAsString();
for (Object obj : regulatoryLabels) {
JSONObject jsonObject = (JSONObject) obj;
result.put(jsonObject.getString("value"), 0);
if (jsonObject.getString("label").equals(bucketKey)) {
result.put(jsonObject.getString("extendCode"), bucket.getDocCount());
break;
}
}
if (bucketKey.equals("其他")) {
result.put("other", bucket.getDocCount());
}
}
}
private void buildIndustrySupervisorGroupResult(Terms groupAgg, JSONObject result) {
if (groupAgg == null) {
return;
}
JSONArray industrySupervisor = deployDictionary(dataDictionaryService.getByType("HYZGBM"));
// 枚举遍历 + 动态匹配
for (Terms.Bucket bucket : groupAgg.getBuckets()) {
String bucketKey = bucket.getKeyAsString();
for (Object obj : industrySupervisor) {
JSONObject jsonObject = (JSONObject) obj;
result.put(jsonObject.getString("value"), 0);
if (jsonObject.getString("label").equals(bucketKey)) {
result.put(jsonObject.getString("value"), bucket.getDocCount());
break;
}
}
if (bucketKey.equals("其他")) {
result.put("other", bucket.getDocCount());
}
}
}
private JSONObject getPermitStatusGroupStatistics(BoolQueryBuilder boolQuery) {
JSONObject result = new JSONObject();
String path = "licenses";
String nestedField = path + ".expiryDate";
// 许可正常
BoolQueryBuilder normalBoolQuery = QueryBuilderUtils.copyBoolQuery(boolQuery);
NestedQueryBuilder normalNestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedField).gt(LocalDate.now().plusDays(30).format(formatter))),
ScoreMode.None
);
normalBoolQuery.must(normalNestedQuery);
Long normalCount = getStatisticCount(normalBoolQuery, StatisticalAnalysisEnum.company.getKey());
result.put("xkzc", normalCount);
// 许可临期
BoolQueryBuilder nearBoolQuery = QueryBuilderUtils.copyBoolQuery(boolQuery);
NestedQueryBuilder nearNestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedField).lte(LocalDate.now().plusDays(30).format(formatter)).gte(LocalDate.now().format(formatter))),
ScoreMode.None
);
nearBoolQuery.must(nearNestedQuery);
Long nearCount = getStatisticCount(nearBoolQuery, StatisticalAnalysisEnum.company.getKey());
result.put("xklq", nearCount);
// 许可超期
BoolQueryBuilder overBoolQuery = QueryBuilderUtils.copyBoolQuery(boolQuery);
NestedQueryBuilder overNestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery(nestedField).lte(LocalDate.now().format(formatter))),
ScoreMode.None
);
overBoolQuery.must(overNestedQuery);
Long overCount = getStatisticCount(overBoolQuery, StatisticalAnalysisEnum.company.getKey());
result.put("xkcq", overCount);
// 无有效期
BoolQueryBuilder nothingBoolQuery = QueryBuilderUtils.copyBoolQuery(boolQuery);
NestedQueryBuilder nothingNestedQuery = QueryBuilders.nestedQuery(
path,
QueryBuilders.boolQuery().must(QueryBuilders.existsQuery(nestedField)),
ScoreMode.None
);
nothingBoolQuery.must(nothingNestedQuery);
Long nothingCount = getStatisticCount(nothingBoolQuery, StatisticalAnalysisEnum.company.getKey());
result.put("wyxq", nothingCount);
return result;
}
}
\ No newline at end of file
......@@ -44,7 +44,7 @@ public class QueryBuilderUtils {
* @param spiltSymbol 分割符号,如:#
* @param aggName 聚合名称,根据此名称从查询结果获取数据,如:Terms unitTypesTerms = searchResponse.getAggregations().get(aggName)
*/
public static void buildSplitFieldAggCondition(SearchSourceBuilder searchSourceBuilder, String field, String spiltSymbol, String aggName) {
public static void buildSplitFieldAggCondition(SearchSourceBuilder searchSourceBuilder, String field, String spiltSymbol, String aggName, String params) {
// Painless 脚本内容
String scriptSource = "if (doc['" + field + "'].size() > 0) {" +
" String value = doc['" + field + "'].value;" +
......@@ -54,6 +54,6 @@ public class QueryBuilderUtils {
"}" +
"return [];";
Script script = new Script(ScriptType.INLINE, "painless", scriptSource, Collections.emptyMap());
searchSourceBuilder.aggregation(AggregationBuilders.terms(aggName).script(script));
searchSourceBuilder.aggregation(AggregationBuilders.terms(aggName).script(script).missing(params).size(100));
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment