chenyi 1 年間 前
コミット
b2fd902ae5

+ 6 - 8
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/ChildNestedAnalyseBuilder.java

@@ -39,19 +39,17 @@ public class ChildNestedAnalyseBuilder implements IEsCountAnalysisBuilder{
                 put("filter_agg", aggregation);
             }}).build();
         } else if (!CollectionUtils.isEmpty(values)) {
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(q1)));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).include(j -> j.terms(values)).size(topN).build())
+            Aggregation aggregation = AggregationBuilders.terms(j -> j.field(field).include(n -> n.terms(values)).size(topN));
+            terms = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(q1)))
                     .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
+                        put("filter_agg", aggregation);
                     }}).build();
         } else {
             topN = topN + 1;
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(q1)));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
+            Aggregation aggregation = AggregationBuilders.terms(j -> j.field(field).size(topN));
+            terms = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(q1)))
                     .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
+                        put("filter_agg", aggregation);
                     }}).build();
         }
         Aggregation finalTerms = terms;

+ 4 - 16
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -149,18 +149,6 @@ public class EsCountService {
             //3. 从es中检索数据
             query = formatQueryService.EsQueryToQuery((operateNode) tree, "patent",projectId);
             builder.query(query);
-//            if (StringUtils.isNotEmpty(groupField) && !groupField.equals("0")) {
-//                String esField = esService.getGroupField(groupField);
-//                esGroupField = esField;
-//                Query existQ = QueryBuilders.exists(i -> i.field(esField));
-//                Query finalQuery = query;
-//                Query bool = QueryBuilders.bool(i -> i.must(finalQuery, existQ));
-//                builder.query(bool);
-//                FieldCollapse collapse = FieldCollapse.of(i -> i.field(esField));
-//                builder.collapse(collapse);
-//            } else {
-//                builder.query(query);
-//            }
         }
         if (query != null) {
             for (EsCountVO countVO : countVOS) {
@@ -1009,8 +997,8 @@ public class EsCountService {
                                    Map<String, List<EsCountDetailDTO>> map, List<String> values,String valueOne) {
         Aggregate termsAgg = agg.nested().aggregations().get("terms_agg");
         List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
-        long otherNum = 0l;
-        if (StringUtils.isNotEmpty(valueOne)) {
+        long otherNum = 0L;
+        if (StringUtils.isNotEmpty(valueOne) || nestChildList.contains(field)) {
             Aggregate filterAgg = termsAgg.filter().aggregations().get("filter_agg");
             List<StringTermsBucket> list = filterAgg.sterms().buckets().array();
             for (StringTermsBucket bucket : list) {
@@ -1038,7 +1026,7 @@ public class EsCountService {
             countDTO.setName("其他");
             countDTO.setTopN(topN);
             Long count = filterAgg.sterms().sumOtherDocCount();
-            if (count > 0) {
+            if (count != null && count > 0) {
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
             }
@@ -1055,7 +1043,7 @@ public class EsCountService {
                     dto.setNumber(bucket.docCount());
                     dto.setTopN(topN);
                     dto.setFirstName(firstName);
-                    if (aggregate != null) {
+                    if (aggregate != null && aggregate.filter().docCount() > 0) {
                         dto.setNumber(aggregate.filter().docCount());
                     }
                     if (dto.getNumber() > 0) {