|
@@ -256,18 +256,62 @@ public class EsCountService {
|
|
|
//3. 从es中检索数据
|
|
|
query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
|
|
|
}
|
|
|
- switch (field) {
|
|
|
-
|
|
|
+ String esField = "";
|
|
|
+ if (StringUtils.isNotEmpty(field)) {
|
|
|
+ switch (field) {
|
|
|
+ case "AD":
|
|
|
+ esField = "app_date";
|
|
|
+ break;
|
|
|
+ case "PD":
|
|
|
+ esField = "public_date";
|
|
|
+ break;
|
|
|
+ case "GD":
|
|
|
+ esField = "grant_date";
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- Aggregation finalAggregation = null;
|
|
|
- Query finalQuery = query;
|
|
|
- Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
|
|
|
- .filters(i -> i.array(Arrays.asList(finalQuery))).build())
|
|
|
- .aggregations(new HashMap() {{
|
|
|
- put("filters_agg", finalAggregation);
|
|
|
- }}).build();
|
|
|
- builder.aggregations("Agg", filtersAgg);
|
|
|
EsDateRangeDTO rangeDTO = new EsDateRangeDTO();
|
|
|
+ if (StringUtils.isNotEmpty(esField)) {
|
|
|
+ String finalEsField = esField;
|
|
|
+ Query finalQuery = query;
|
|
|
+ Aggregation min = AggregationBuilders.min(i -> i.field(finalEsField).format("yyyy"));
|
|
|
+ Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
|
|
|
+ .filters(i -> i.array(Arrays.asList(finalQuery))).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("filters_agg", min);
|
|
|
+ }}).build();
|
|
|
+
|
|
|
+ Aggregation max = AggregationBuilders.max(i -> i.field(finalEsField).format("yyyy"));
|
|
|
+ Aggregation maxFilters = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
|
|
|
+ .filters(i -> i.array(Arrays.asList(finalQuery))).build())
|
|
|
+ .aggregations(new HashMap() {{
|
|
|
+ put("max_agg", max);
|
|
|
+ }}).build();
|
|
|
+
|
|
|
+
|
|
|
+ builder.aggregations("minAgg", filtersAgg);
|
|
|
+ builder.aggregations("maxAgg", maxFilters);
|
|
|
+ SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
|
|
|
+ Aggregate minAgg = response.aggregations().get("minAgg");
|
|
|
+ if (minAgg != null) {
|
|
|
+ List<FiltersBucket> list = minAgg.filters().buckets().array();
|
|
|
+ for (FiltersBucket bucket : list) {
|
|
|
+ Aggregate aggregate = bucket.aggregations().get("filters_agg");
|
|
|
+ String minValue = aggregate.min().valueAsString();
|
|
|
+ rangeDTO.setMinDate(minValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Aggregate maxAgg = response.aggregations().get("maxAgg");
|
|
|
+ if (maxAgg != null) {
|
|
|
+ List<FiltersBucket> list = maxAgg.filters().buckets().array();
|
|
|
+ for (FiltersBucket bucket : list) {
|
|
|
+ Aggregate aggregate = bucket.aggregations().get("max_agg");
|
|
|
+ String maxValue = aggregate.max().valueAsString();
|
|
|
+ rangeDTO.setMaxDate(maxValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return rangeDTO;
|
|
|
}
|
|
|
|
|
@@ -560,6 +604,39 @@ public class EsCountService {
|
|
|
detailDTO.setNumber(sum);
|
|
|
esCountDetailDTOS.add(detailDTO);
|
|
|
}
|
|
|
+ } else if (StringUtils.isNotEmpty(format) && format.equals("季")) {
|
|
|
+ for (DateHistogramBucket bucket : list) {
|
|
|
+ String yearMonth = bucket.keyAsString();
|
|
|
+ String year = yearMonth.substring(0, yearMonth.indexOf("-"));
|
|
|
+ String firstQuarter = year + "-01";
|
|
|
+ String secondQuarter = year + "-04";
|
|
|
+ String thirdQuarter = year + "-07";
|
|
|
+ String forthQuarter = year + "-10";
|
|
|
+ String firstQ = year + "-Q1";
|
|
|
+ String secondQ = year + "-Q2";
|
|
|
+ String thirdQ = year + "-Q3";
|
|
|
+ String forthQ = year + "-Q4";
|
|
|
+ EsCountDetailDTO dto = new EsCountDetailDTO();
|
|
|
+ dto.setField(field);
|
|
|
+ Aggregate aggregate = bucket.aggregations().get("filter_agg");
|
|
|
+ if (yearMonth.equals(firstQuarter)) {
|
|
|
+ dto.setName(firstQ);
|
|
|
+ } else if (yearMonth.equals(secondQuarter)) {
|
|
|
+ dto.setName(secondQ);
|
|
|
+ } else if (yearMonth.equals(thirdQuarter)) {
|
|
|
+ dto.setName(thirdQ);
|
|
|
+ } else if (yearMonth.equals(forthQuarter)) {
|
|
|
+ dto.setName(forthQ);
|
|
|
+ }
|
|
|
+ dto.setNumber(bucket.docCount());
|
|
|
+ dto.setTopN(topN);
|
|
|
+ if (aggregate != null) {
|
|
|
+ dto.setNumber(aggregate.filter().docCount());
|
|
|
+ }
|
|
|
+ if (dto.getNumber() > 0) {
|
|
|
+ esCountDetailDTOS.add(dto);
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
list.forEach(bucket -> {
|
|
|
EsCountDetailDTO dto = new EsCountDetailDTO();
|
|
@@ -587,10 +664,11 @@ public class EsCountService {
|
|
|
countDTO.setField(field);
|
|
|
countDTO.setName("其他");
|
|
|
if (list.size() > topN) {
|
|
|
- countDTO.setNumber((long)(list.size() - topN));
|
|
|
+ int sum = list.size() - topN;
|
|
|
+ countDTO.setNumber(Long.valueOf(String.valueOf(sum)));
|
|
|
|
|
|
} else {
|
|
|
- countDTO.setNumber((long)0);
|
|
|
+ countDTO.setNumber(0L);
|
|
|
}
|
|
|
countDTO.setTopN(topN);
|
|
|
detailDTOS.add(countDTO);
|