Browse Source

Merge remote-tracking branch 'origin/master'

xiexiang 1 năm trước cách đây
mục cha
commit
6692361477

+ 10 - 5
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/ChildNestedAnalyseBuilder.java

@@ -33,12 +33,17 @@ public class ChildNestedAnalyseBuilder implements IEsCountAnalysisBuilder{
             String str = "*";
             String s = str.concat(valueOne).concat("*");
             Query query = QueryBuilders.wildcard(i -> i.field(field).value(s));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query,q1)));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
+//            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query,q1)));
+//            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+//                    .field(field).size(topN).build())
+//                    .aggregations(new HashMap() {{
+//                        put("filter_agg", filter);
+//                    }}).build();
+            Aggregation aggregation = AggregationBuilders.terms(j -> j.field(field).size(topN));
+            terms = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(query,q1)))
                     .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
-                    }}).build();
+                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()

+ 12 - 10
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/NestedCountAnalysisBuilder.java

@@ -1,9 +1,6 @@
 package cn.cslg.pas.factorys.EsCountAnalyseBuilderFactory;
 
-import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
-import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
-import co.elastic.clients.elasticsearch._types.aggregations.NestedAggregation;
-import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
+import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
@@ -11,6 +8,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 
@@ -36,12 +34,16 @@ public class NestedCountAnalysisBuilder implements IEsCountAnalysisBuilder {
             String str = "*";
             String s = str.concat(valueOne).concat("*");
             Query query = QueryBuilders.wildcard(i -> i.field(field).value(s));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
-                    .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
-                    }}).build();
+//            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
+//            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+//                    .field(field).size(topN).build())
+//                    .aggregations(new HashMap() {{
+//                        put("filter_agg", filter);
+//                    }}).build();
+            Aggregation aggregation = AggregationBuilders.terms(j -> j.field(field).size(topN));
+            terms = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(query))).aggregations(new HashMap() {{
+                put("filter_agg", aggregation);
+            }}).build();
         } else if (!CollectionUtils.isEmpty(values)) {
             terms = AggregationBuilders.terms(i -> i.field(field).include(j -> j.terms(values)).size(topN));
         } else {

+ 10 - 6
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/TermsCountAnalysisBuilder.java

@@ -35,12 +35,16 @@ public class TermsCountAnalysisBuilder implements IEsCountAnalysisBuilder {
             String str = "*";
             String s = str.concat(valueOne).concat("*");
             Query query = QueryBuilders.wildcard(i -> i.field(field).value(s));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
-                    .aggregations(new HashMap() {{
-                        put("filter_agg", filter);
-                    }}).build();
+//            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
+//            aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+//                    .field(field).size(topN).build())
+//                    .aggregations(new HashMap() {{
+//                        put("filter_agg", filter);
+//                    }}).build();
+            Aggregation term = AggregationBuilders.terms(j -> j.field(field).size(topN));
+            aggregation = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(query))).aggregations(new HashMap() {{
+                put("filter_agg", term);
+            }}).build();
         } else if (!CollectionUtils.isEmpty(values)) {
             aggregation = AggregationBuilders.terms(i -> i.field(field).include(j -> j.terms(values)).size(topN));
         } else {

+ 155 - 82
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -160,20 +160,20 @@ public class EsCountService {
             }
         }
 
-        if (countVOS.size() == 1) {
-            EsCountVO countVO = countVOS.get(0);
-            String field = countVO.getField();
-            String valueOne = countVO.getValueOne();
-            String valueTwo = countVO.getValueTwo();
-            if (StringUtils.isNotEmpty(valueOne) && StringUtils.isEmpty(valueTwo)) {
-                String filterCondition = field + " = " + valueOne;
-                if (searchCondition != null && !"".equals(searchCondition.trim())) {
-                    searchCondition = filterCondition + " AND " + searchCondition;
-                } else {
-                    searchCondition = filterCondition;
-                }
-            }
-        }
+//        if (countVOS.size() == 1) {
+//            EsCountVO countVO = countVOS.get(0);
+//            String field = countVO.getField();
+//            String valueOne = countVO.getValueOne();
+//            String valueTwo = countVO.getValueTwo();
+//            if (StringUtils.isNotEmpty(valueOne) && StringUtils.isEmpty(valueTwo)) {
+//                String filterCondition = field + " = " + valueOne;
+//                if (searchCondition != null && !"".equals(searchCondition.trim())) {
+//                    searchCondition = filterCondition + " AND " + searchCondition;
+//                } else {
+//                    searchCondition = filterCondition;
+//                }
+//            }
+//        }
 
         if (!CollectionUtils.isEmpty(customFields)) {
             searchCondition = esService.parseCustomField(customFields,projectId,taskId);
@@ -246,7 +246,8 @@ public class EsCountService {
                     } else if (nestedList.contains(field)) {
                         filtersBuckets.forEach(filtersBucket -> {
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getNestedCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
+                            this.getNestedCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO,
+                                    firstName, map, values,valueOne);
                             if (!CollectionUtils.isEmpty(values)) {
                                 esCountDTO.setAllNumber(filtersAgg.nested().docCount());
                             }
@@ -273,7 +274,7 @@ public class EsCountService {
                         filtersBuckets.forEach(filtersBucket -> {
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
                             Aggregate childAgg = filtersAgg.children().aggregations().get("childAgg");
-                            this.getNestedCountDTOS(childAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
+                            this.getNestedCountDTOS(childAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values,valueOne);
                             if (!CollectionUtils.isEmpty(values)) {
                                 esCountDTO.setAllNumber(childAgg.nested().docCount());
                             }
@@ -309,7 +310,7 @@ public class EsCountService {
                     } else {
                         filtersBuckets.forEach(filtersBucket -> {
                             Aggregate filtersAgg = filtersBucket.aggregations().get("filters_agg");
-                            this.getTermCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
+                            this.getTermCountDTOS(filtersAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values,valueOne);
                         });
                     }
                 } else {
@@ -323,7 +324,7 @@ public class EsCountService {
                         this.getDateAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                     }
                 } else if (nestedList.contains(field)) {
-                    this.getNestedCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
+                    this.getNestedCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values,valueOne);
                     if (!CollectionUtils.isEmpty(values)) {
                         esCountDTO.setAllNumber(agg.nested().docCount());
                     }
@@ -332,7 +333,7 @@ public class EsCountService {
                     this.getDateCountDTOS(termsAgg, field, topN, format, detailDTOS, esCountDTO,valueOne,valueTwo);
                 } else if (nestChildList.contains(field)) {
                     Aggregate childAgg = agg.children().aggregations().get("childAgg");
-                    this.getNestedCountDTOS(childAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
+                    this.getNestedCountDTOS(childAgg, field, topN, detailDTOS, esCountDTO, firstName, map, values,valueOne);
                     if (!CollectionUtils.isEmpty(values)) {
                         esCountDTO.setAllNumber(childAgg.nested().docCount());
                     }
@@ -346,7 +347,7 @@ public class EsCountService {
                 } else if (numberList.contains(field)) {
                     this.getNumberAnalysisDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
                 } else {
-                    this.getTermCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values);
+                    this.getTermCountDTOS(agg, field, topN, detailDTOS, esCountDTO, firstName, map, values,valueOne);
                 }
             }
             esCountDTO.setCondition(searchCondition);
@@ -540,45 +541,81 @@ public class EsCountService {
      */
     public void getTermCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,
                                  EsCountDTO esCountDTO, String firstName,
-                                 Map<String, List<EsCountDetailDTO>> map,List<String> values) {
+                                 Map<String, List<EsCountDetailDTO>> map,List<String> values,String valueOne) {
         List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
         long otherNum = 0l;
-        List<StringTermsBucket> list = agg.sterms().buckets().array();
-        for (StringTermsBucket bucket : list) {
-            EsCountDetailDTO dto = new EsCountDetailDTO();
-            dto.setField(field);
-            Aggregate aggregate = bucket.aggregations().get("filter_agg");
-            String value = bucket.key().stringValue();
-            if (StringUtils.isNotEmpty(value)) {
-                dto.setName(value);
-                dto.setNumber(bucket.docCount());
-                dto.setTopN(topN);
-                dto.setFirstName(firstName);
-                if (aggregate != null) {
-                    dto.setNumber(aggregate.filter().docCount());
+        if (StringUtils.isNotEmpty(valueOne)) {
+            Aggregate filterAgg = agg.filter().aggregations().get("filter_agg");
+            List<StringTermsBucket> list = filterAgg.sterms().buckets().array();
+            for (StringTermsBucket bucket : list) {
+                EsCountDetailDTO dto = new EsCountDetailDTO();
+                dto.setField(field);
+                String value = bucket.key().stringValue();
+                if (StringUtils.isNotEmpty(value)) {
+                    dto.setName(value);
+                    dto.setNumber(bucket.docCount());
+                    dto.setTopN(topN);
+                    dto.setFirstName(firstName);
+                    if (dto.getNumber() > 0) {
+                        countDetailDTOS.add(dto);
+                    }
+                } else {
+                    otherNum += 1;
                 }
-                if (dto.getNumber() > 0) {
-                    countDetailDTOS.add(dto);
+            }
+            if (countDetailDTOS.size() > topN) {
+                countDetailDTOS.remove(countDetailDTOS.size() - 1);
+            }
+
+            EsCountDetailDTO countDTO = new EsCountDetailDTO();
+            countDTO.setField(field);
+            countDTO.setName("其他");
+            countDTO.setTopN(topN);
+            Long count = filterAgg.sterms().sumOtherDocCount();
+            if (count > 0) {
+                countDTO.setNumber(count + otherNum);
+                countDetailDTOS.add(countDTO);
+            }
+            esCountDTO.setRemainingNum(count);
+        } else {
+            List<StringTermsBucket> list = agg.sterms().buckets().array();
+            for (StringTermsBucket bucket : list) {
+                EsCountDetailDTO dto = new EsCountDetailDTO();
+                dto.setField(field);
+                Aggregate aggregate = bucket.aggregations().get("filter_agg");
+                String value = bucket.key().stringValue();
+                if (StringUtils.isNotEmpty(value)) {
+                    dto.setName(value);
+                    dto.setNumber(bucket.docCount());
+                    dto.setTopN(topN);
+                    dto.setFirstName(firstName);
+                    if (aggregate != null) {
+                        dto.setNumber(aggregate.filter().docCount());
+                    }
+                    if (dto.getNumber() > 0) {
+                        countDetailDTOS.add(dto);
+                    }
+                } else {
+                    otherNum += 1;
                 }
-            } else {
-                otherNum += 1;
             }
-        }
 
-        if (countDetailDTOS.size() > topN) {
-            countDetailDTOS.remove(countDetailDTOS.size() - 1);
-        }
+            if (countDetailDTOS.size() > topN) {
+                countDetailDTOS.remove(countDetailDTOS.size() - 1);
+            }
 
-        EsCountDetailDTO countDTO = new EsCountDetailDTO();
-        countDTO.setField(field);
-        countDTO.setName("其他");
-        countDTO.setTopN(topN);
-        Long count = agg.sterms().sumOtherDocCount();
-        if (count > 0) {
-            countDTO.setNumber(count + otherNum);
-            detailDTOS.add(countDTO);
+            EsCountDetailDTO countDTO = new EsCountDetailDTO();
+            countDTO.setField(field);
+            countDTO.setName("其他");
+            countDTO.setTopN(topN);
+            Long count = agg.sterms().sumOtherDocCount();
+            if (count > 0) {
+                countDTO.setNumber(count + otherNum);
+                detailDTOS.add(countDTO);
+            }
+            esCountDTO.setRemainingNum(count);
         }
-        esCountDTO.setRemainingNum(count);
+
 
         List<String> strs = new ArrayList<>();
         if (!CollectionUtils.isEmpty(values)) {
@@ -1058,46 +1095,82 @@ public class EsCountService {
      */
     public void getNestedCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,
                                    EsCountDTO esCountDTO, String firstName,
-                                   Map<String, List<EsCountDetailDTO>> map, List<String> values) {
+                                   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;
-        List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
-        for (StringTermsBucket bucket : list) {
-            EsCountDetailDTO dto = new EsCountDetailDTO();
-            dto.setField(field);
-            Aggregate aggregate = bucket.aggregations().get("filter_agg");
-            String value = bucket.key().stringValue();
-            if (StringUtils.isNotEmpty(value)) {
-                dto.setName(value);
-                dto.setNumber(bucket.docCount());
-                dto.setTopN(topN);
-                dto.setFirstName(firstName);
-                if (aggregate != null) {
-                    dto.setNumber(aggregate.filter().docCount());
+        if (StringUtils.isNotEmpty(valueOne)) {
+            Aggregate filterAgg = termsAgg.filter().aggregations().get("filter_agg");
+            List<StringTermsBucket> list = filterAgg.sterms().buckets().array();
+            for (StringTermsBucket bucket : list) {
+                EsCountDetailDTO dto = new EsCountDetailDTO();
+                dto.setField(field);
+                String value = bucket.key().stringValue();
+                if (StringUtils.isNotEmpty(value)) {
+                    dto.setName(value);
+                    dto.setNumber(bucket.docCount());
+                    dto.setTopN(topN);
+                    dto.setFirstName(firstName);
+                    if (dto.getNumber() > 0) {
+                        countDetailDTOS.add(dto);
+                    }
+                } else {
+                    otherNum += 1;
                 }
-                if (dto.getNumber() > 0) {
-                    countDetailDTOS.add(dto);
+            }
+            if (countDetailDTOS.size() > topN) {
+                countDetailDTOS.remove(countDetailDTOS.size() - 1);
+            }
+
+            EsCountDetailDTO countDTO = new EsCountDetailDTO();
+            countDTO.setField(field);
+            countDTO.setName("其他");
+            countDTO.setTopN(topN);
+            Long count = filterAgg.sterms().sumOtherDocCount();
+            if (count > 0) {
+                countDTO.setNumber(count + otherNum);
+                countDetailDTOS.add(countDTO);
+            }
+            esCountDTO.setRemainingNum(count);
+        } else {
+            List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
+            for (StringTermsBucket bucket : list) {
+                EsCountDetailDTO dto = new EsCountDetailDTO();
+                dto.setField(field);
+                Aggregate aggregate = bucket.aggregations().get("filter_agg");
+                String value = bucket.key().stringValue();
+                if (StringUtils.isNotEmpty(value)) {
+                    dto.setName(value);
+                    dto.setNumber(bucket.docCount());
+                    dto.setTopN(topN);
+                    dto.setFirstName(firstName);
+                    if (aggregate != null) {
+                        dto.setNumber(aggregate.filter().docCount());
+                    }
+                    if (dto.getNumber() > 0) {
+                        countDetailDTOS.add(dto);
+                    }
+                } else {
+                    otherNum += 1;
                 }
-            } else {
-                otherNum += 1;
             }
-        }
 
-        if (countDetailDTOS.size() > topN) {
-            countDetailDTOS.remove(countDetailDTOS.size() - 1);
-        }
+            if (countDetailDTOS.size() > topN) {
+                countDetailDTOS.remove(countDetailDTOS.size() - 1);
+            }
 
-        EsCountDetailDTO countDTO = new EsCountDetailDTO();
-        countDTO.setField(field);
-        countDTO.setName("其他");
-        countDTO.setTopN(topN);
-        Long count = termsAgg.sterms().sumOtherDocCount();
-        if (count > 0) {
-            countDTO.setNumber(count + otherNum);
-            countDetailDTOS.add(countDTO);
+            EsCountDetailDTO countDTO = new EsCountDetailDTO();
+            countDTO.setField(field);
+            countDTO.setName("其他");
+            countDTO.setTopN(topN);
+            Long count = termsAgg.sterms().sumOtherDocCount();
+            if (count > 0) {
+                countDTO.setNumber(count + otherNum);
+                countDetailDTOS.add(countDTO);
+            }
+            esCountDTO.setRemainingNum(count);
         }
-        esCountDTO.setRemainingNum(count);
+
 
         List<String> strs = new ArrayList<>();
         if (!CollectionUtils.isEmpty(values)) {