zero 1 год назад
Родитель
Сommit
2d6c91f462
17 измененных файлов с 295 добавлено и 77 удалено
  1. 2 0
      src/main/java/cn/cslg/pas/common/vo/business/EsCountVO.java
  2. 23 3
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/ChildAnalysisBuilder.java
  3. 12 3
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/DateAnalysisBuilder.java
  4. 8 0
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/IEsAnalysisBuilder.java
  5. 24 5
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/NestedAnalysisBuilder.java
  6. 52 16
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/RangeAnalysisBuilder.java
  7. 23 4
      src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/TermsAnalysisBuilder.java
  8. 46 15
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/ChildCountBuilder.java
  9. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/DateHistogramBuilder.java
  10. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/FilterCountBuilder.java
  11. 5 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/IEsCountBuilder.java
  12. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/NestedCountBuilder.java
  13. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/RangeCountBuilder.java
  14. 11 0
      src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/TermsCountBuilder.java
  15. 0 1
      src/main/java/cn/cslg/pas/service/business/FTOCompareRecordService.java
  16. 33 30
      src/main/java/cn/cslg/pas/service/business/es/EsCountService.java
  17. 12 0
      src/main/resources/jsons/esCount.json

+ 2 - 0
src/main/java/cn/cslg/pas/common/vo/business/EsCountVO.java

@@ -10,6 +10,8 @@ public class EsCountVO {
     private String condition;
     //栏位
     private String field;
+    //自定义栏位类型
+    private Integer fieldType;
     //统计搜索的栏位值1
     private String valueOne;
     //统计搜索的栏位值2

+ 23 - 3
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/ChildAnalysisBuilder.java

@@ -4,10 +4,15 @@ import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
 import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
 import co.elastic.clients.elasticsearch._types.aggregations.ChildrenAggregation;
 import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 @Component
 public class ChildAnalysisBuilder implements IEsAnalysisBuilder {
@@ -16,13 +21,18 @@ public class ChildAnalysisBuilder implements IEsAnalysisBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public List<String> values = new ArrayList<>();
 
     @Override
     public Aggregation createAnalyseAgg() {
         Aggregation aggregation = null;
-        if (StringUtils.isNotEmpty(fieldValue)){
-            Aggregation filter = AggregationBuilders.filter(n -> n.term(m -> m.field("custom_field.field_value.raw")
-                    .value(fieldValue)));
+        if (!CollectionUtils.isEmpty(values)){
+            List<Query> queryList = new ArrayList<>();
+            for (String value : values) {
+                Query q = QueryBuilders.term(i -> i.field("custom_field.field_value.raw").value(value));
+                queryList.add(q);
+            }
+            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
             Aggregation filterAgg = new Aggregation.Builder().terms(new TermsAggregation.Builder()
                     .field(field).size(topN).build())
                     .aggregations(new HashMap() {{
@@ -84,4 +94,14 @@ public class ChildAnalysisBuilder implements IEsAnalysisBuilder {
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public List<String> getValues() {
+        return values;
+    }
+
+    @Override
+    public void setValues(List<String> values) {
+        this.values = values;
+    }
 }

+ 12 - 3
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/DateAnalysisBuilder.java

@@ -11,9 +11,7 @@ import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashMap;
+import java.util.*;
 
 @Component
 public class DateAnalysisBuilder implements IEsAnalysisBuilder {
@@ -22,6 +20,7 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public List<String> values = new ArrayList<>();
     public static final int YEAR = 4;
     public static final int YEARRANGE = 9;
     public static final int MONTH = 7;
@@ -237,4 +236,14 @@ public class DateAnalysisBuilder implements IEsAnalysisBuilder {
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public List<String> getValues() {
+        return values;
+    }
+
+    @Override
+    public void setValues(List<String> values) {
+        this.values = values;
+    }
 }

+ 8 - 0
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/IEsAnalysisBuilder.java

@@ -2,12 +2,16 @@ package cn.cslg.pas.factorys.EsAnalysisBuilderFactory;
 
 import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public interface IEsAnalysisBuilder {
     public String field = "";
     public String fieldValue = "";
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public List<String> values = new ArrayList<>();
 
     public Aggregation createAnalyseAgg() throws Exception;
 
@@ -30,4 +34,8 @@ public interface IEsAnalysisBuilder {
     public Boolean getIfHaveChild();
 
     public void setIfHaveChild(Boolean ifHaveChild);
+
+    public List<String> getValues();
+
+    public void setValues(List<String> values);
 }

+ 24 - 5
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/NestedAnalysisBuilder.java

@@ -8,8 +8,11 @@ import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 @Component
 public class NestedAnalysisBuilder implements IEsAnalysisBuilder {
@@ -18,15 +21,21 @@ public class NestedAnalysisBuilder implements IEsAnalysisBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public List<String> values = new ArrayList<>();
 
     @Override
     public Aggregation createAnalyseAgg() {
-//        Aggregation terms = AggregationBuilders.terms(j -> j.field(field).size(topN));
         Aggregation aggregation = null;
-        if (StringUtils.isNotEmpty(fieldValue)) {
-            Query query = QueryBuilders.term(i -> i.field(field).value(fieldValue));
-            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            Aggregation finalTerms= new Aggregation.Builder().terms(new TermsAggregation.Builder()
+        if (!CollectionUtils.isEmpty(values)) {
+            List<Query> queryList = new ArrayList<>();
+            for (String value : values) {
+                Query q = QueryBuilders.term(i -> i.field(field).value(value));
+                queryList.add(q);
+            }
+            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
+//            Query query = QueryBuilders.term(i -> i.field(field).value(fieldValue));
+//            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
+            Aggregation finalTerms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
                     .field(field).size(topN).build())
                     .aggregations(new HashMap() {{
                         put("filter_agg", filter);
@@ -90,4 +99,14 @@ public class NestedAnalysisBuilder implements IEsAnalysisBuilder {
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public List<String> getValues() {
+        return values;
+    }
+
+    @Override
+    public void setValues(List<String> values) {
+        this.values = values;
+    }
 }

+ 52 - 16
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/RangeAnalysisBuilder.java

@@ -1,12 +1,16 @@
 package cn.cslg.pas.factorys.EsAnalysisBuilderFactory;
 
 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 co.elastic.clients.json.JsonData;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 @Component
 public class RangeAnalysisBuilder implements IEsAnalysisBuilder {
@@ -15,27 +19,49 @@ public class RangeAnalysisBuilder implements IEsAnalysisBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public List<String> values = new ArrayList<>();
 
     @Override
     public Aggregation createAnalyseAgg() {
         Aggregation aggregation = null;
-        if (StringUtils.isNotEmpty(fieldValue)) {
-            if (fieldValue.contains("-")) {
-                String start = fieldValue.substring(0, fieldValue.indexOf("-"));
-                String end = fieldValue.substring(fieldValue.indexOf("-") + 1);
-                end = String.valueOf(Integer.parseInt(end) + 1);
-                String finalEnd = end;
-                aggregation = AggregationBuilders.range(i -> i.field(field)
-                        .ranges(j -> j.from(start).to(finalEnd)));
-            } else if (fieldValue.contains("以上")) {
-                String start = fieldValue.substring(0, fieldValue.indexOf("以上"));
-                aggregation = AggregationBuilders.range(i -> i.field(field)
-                        .ranges(j -> j.from(start)));
-            } else {
-                String end = String.valueOf(Integer.parseInt(fieldValue) + 1);
-                aggregation = AggregationBuilders.range(i -> i.field(field)
-                        .ranges(j -> j.from(fieldValue).to(end)));
+        if (!CollectionUtils.isEmpty(values)) {
+            List<Query> queryList = new ArrayList<>();
+            for (String value : values) {
+                if (value.contains("-")) {
+                    String start = value.substring(0, value.indexOf("-"));
+                    String end = value.substring(value.indexOf("-") + 1);
+//                    end = String.valueOf(Integer.parseInt(end) + 1);
+//                    String finalEnd = end;
+                    Query query = QueryBuilders.range(i -> i.field(field).from(start).to(end));
+                    queryList.add(query);
+                } else if (value.contains("以上")) {
+                    String start = value.substring(0, value.indexOf("以上"));
+                    Query query = QueryBuilders.range(i -> i.field(field).from(start));
+                    queryList.add(query);
+                } else {
+//                    String end = String.valueOf(Integer.parseInt(value) + 1);
+                    Query query = QueryBuilders.range(i -> i.field(field).from(value).to(value));
+                    queryList.add(query);
+                }
             }
+            aggregation = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
+
+//            if (fieldValue.contains("-")) {
+//                String start = fieldValue.substring(0, fieldValue.indexOf("-"));
+//                String end = fieldValue.substring(fieldValue.indexOf("-") + 1);
+//                end = String.valueOf(Integer.parseInt(end) + 1);
+//                String finalEnd = end;
+//                aggregation = AggregationBuilders.range(i -> i.field(field)
+//                        .ranges(j -> j.from(start).to(finalEnd)));
+//            } else if (fieldValue.contains("以上")) {
+//                String start = fieldValue.substring(0, fieldValue.indexOf("以上"));
+//                aggregation = AggregationBuilders.range(i -> i.field(field)
+//                        .ranges(j -> j.from(start)));
+//            } else {
+//                String end = String.valueOf(Integer.parseInt(fieldValue) + 1);
+//                aggregation = AggregationBuilders.range(i -> i.field(field)
+//                        .ranges(j -> j.from(fieldValue).to(end)));
+//            }
         }
         return aggregation;
     }
@@ -89,4 +115,14 @@ public class RangeAnalysisBuilder implements IEsAnalysisBuilder {
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public List<String> getValues() {
+        return values;
+    }
+
+    @Override
+    public void setValues(List<String> values) {
+        this.values = values;
+    }
 }

+ 23 - 4
src/main/java/cn/cslg/pas/factorys/EsAnalysisBuilderFactory/TermsAnalysisBuilder.java

@@ -3,10 +3,15 @@ package cn.cslg.pas.factorys.EsAnalysisBuilderFactory;
 import co.elastic.clients.elasticsearch._types.aggregations.Aggregation;
 import co.elastic.clients.elasticsearch._types.aggregations.AggregationBuilders;
 import co.elastic.clients.elasticsearch._types.aggregations.TermsAggregation;
+import co.elastic.clients.elasticsearch._types.query_dsl.Query;
+import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 
 @Component
 public class TermsAnalysisBuilder implements IEsAnalysisBuilder {
@@ -15,14 +20,20 @@ public class TermsAnalysisBuilder implements IEsAnalysisBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public List<String> values = new ArrayList<>();
 
     @Override
     public Aggregation createAnalyseAgg() {
         Aggregation aggregation = null;
-        if (StringUtils.isNotEmpty(fieldValue)) {
-//            Query q = QueryBuilders.term(i -> i.field(field).value(fieldValue));
-//            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.must(query)));
-            Aggregation filter = AggregationBuilders.filter(n -> n.term(m -> m.field(field).value(fieldValue)));
+        if (!CollectionUtils.isEmpty(values)) {
+
+            List<Query> queryList = new ArrayList<>();
+            for (String value : values) {
+                Query q = QueryBuilders.term(i -> i.field(field).value(value));
+                queryList.add(q);
+            }
+            Aggregation filter = AggregationBuilders.filter(n -> n.bool(k -> k.should(queryList)));
+//            Aggregation filter = AggregationBuilders.filter(n -> n.term(m -> m.field(field).value(fieldValue)));
             aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
                     .field(field).size(topN).build())
                     .aggregations(new HashMap() {{
@@ -71,4 +82,12 @@ public class TermsAnalysisBuilder implements IEsAnalysisBuilder {
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    public List<String> getValues() {
+        return values;
+    }
+
+    public void setValues(List<String> values) {
+        this.values = values;
+    }
 }

+ 46 - 15
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/ChildCountBuilder.java

@@ -6,6 +6,7 @@ import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.Arrays;
 import java.util.HashMap;
 
 @Component
@@ -16,29 +17,51 @@ public class ChildCountBuilder implements IEsCountBuilder{
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
 
     @Override
     public Aggregation createAggregation() {
-        Aggregation terms;
+        Aggregation terms = null;
         if (ifHaveChild) {
-            Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.stats_value.raw").size(topN));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
-                    .aggregations(new HashMap() {{
-                        put("filter_agg", agg);
-                    }}).build();
+            if (StringUtils.isNotEmpty(valueOne)) {
+
+            } else {
+                Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.stats_value.raw").size(topN));
+                Query query = QueryBuilders.term(i -> i.field("custom_field.field_type").value(fieldType));
+                Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                        .filters(i -> i.array(Arrays.asList(query))).build())
+                        .aggregations(new HashMap() {{
+                            put("filters_agg", agg);
+                        }}).build();
+                terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                        .field(field).size(topN).build())
+                        .aggregations(new HashMap() {{
+                            put("filter_agg", filtersAgg);
+                        }}).build();
+            }
+
         } else {
-            Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.field_value.raw").size(topN));
-            terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(field).size(topN).build())
-                    .aggregations(new HashMap() {{
-                        put("filter_agg", agg);
-                    }}).build();
+            if (StringUtils.isNotEmpty(valueOne)) {
+
+            } else {
+                Aggregation agg = AggregationBuilders.terms(i -> i.field("custom_field.stats_value.raw").size(topN));
+                Query query = QueryBuilders.term(i -> i.field("custom_field.field_type").value(fieldType));
+                Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                        .filters(i -> i.array(Arrays.asList(query))).build())
+                        .aggregations(new HashMap() {{
+                            put("filters_agg", agg);
+                        }}).build();
+                terms = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                        .field(field).size(topN).build())
+                        .aggregations(new HashMap() {{
+                            put("filter_agg", filtersAgg);
+                        }}).build();
+            }
         }
-
+        Aggregation finalTerms = terms;
         Aggregation aggregation = new Aggregation.Builder().children(new ChildrenAggregation.Builder()
                 .type("project_customfield").build()).aggregations(new HashMap() {{
-            put("child_agg", terms);
+            put("child_agg", finalTerms);
         }}).build();
         return aggregation;
     }
@@ -100,4 +123,12 @@ public class ChildCountBuilder implements IEsCountBuilder{
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/DateHistogramBuilder.java

@@ -19,6 +19,7 @@ public class DateHistogramBuilder implements IEsCountBuilder{
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -83,4 +84,14 @@ public class DateHistogramBuilder implements IEsCountBuilder{
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    @Override
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/FilterCountBuilder.java

@@ -12,6 +12,7 @@ public class FilterCountBuilder implements IEsCountBuilder{
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
 
 
     @Override
@@ -83,4 +84,14 @@ public class FilterCountBuilder implements IEsCountBuilder{
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    @Override
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 5 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/IEsCountBuilder.java

@@ -11,6 +11,7 @@ public interface IEsCountBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
 
     public Aggregation createAggregation() throws Exception;
 
@@ -37,4 +38,8 @@ public interface IEsCountBuilder {
     public Boolean getIfHaveChild();
 
     public void setIfHaveChild(Boolean ifHaveChild);
+
+    public String getFieldType();
+
+    public void setFieldType(String fieldType);
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/NestedCountBuilder.java

@@ -17,6 +17,7 @@ public class NestedCountBuilder implements IEsCountBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -101,4 +102,14 @@ public class NestedCountBuilder implements IEsCountBuilder {
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    @Override
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/RangeCountBuilder.java

@@ -11,6 +11,7 @@ public class RangeCountBuilder implements IEsCountBuilder{
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
 
     @Override
     public Aggregation createAggregation() {
@@ -66,4 +67,14 @@ public class RangeCountBuilder implements IEsCountBuilder{
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    @Override
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 11 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/TermsCountBuilder.java

@@ -19,6 +19,7 @@ public class TermsCountBuilder implements IEsCountBuilder{
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    public String fieldType = null;
     @Override
     public Aggregation createAggregation() {
         Aggregation aggregation = AggregationBuilders.terms(i -> i.field(field).size(topN));
@@ -96,4 +97,14 @@ public class TermsCountBuilder implements IEsCountBuilder{
     public void setIfHaveChild(Boolean ifHaveChild) {
         this.ifHaveChild = ifHaveChild;
     }
+
+    @Override
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    @Override
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 0 - 1
src/main/java/cn/cslg/pas/service/business/FTOCompareRecordService.java

@@ -21,7 +21,6 @@ import cn.cslg.pas.service.business.es.EsPatentService;
 import cn.cslg.pas.service.business.es.EsService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.spire.pdf.packages.sprcxq;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.BeanUtils;

+ 33 - 30
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -14,6 +14,7 @@ import cn.cslg.pas.factorys.EsCountBuilderFactory.EsCountBuilderFactory;
 import cn.cslg.pas.factorys.EsCountBuilderFactory.IEsCountBuilder;
 import cn.cslg.pas.service.business.CommonService;
 import cn.cslg.pas.service.query.FormatQueryService;
+import cn.hutool.json.JSONUtil;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
@@ -213,28 +214,31 @@ public class EsCountService {
             iEsAnalysisBuilder.setField(esConfigVO.getEsField());
             iEsAnalysisBuilder.setTopN(topN);
             iEsAnalysisBuilder.setIfHaveChild(ifHaveChild);
-            for (String value : values) {
-                if (iEsAnalysisBuilder.getField().contains(".")) {
-                    String path = iEsAnalysisBuilder.getField().substring(0, iEsAnalysisBuilder.getField().indexOf("."));
-                    iEsAnalysisBuilder.setPath(path);
-                }
-                iEsAnalysisBuilder.setFieldValue(value);
-                Aggregation aggregation = iEsAnalysisBuilder.createAnalyseAgg();
-                builder.aggregations("Agg", aggregation);
-                SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+            if (iEsAnalysisBuilder.getField().contains(".")) {
+                String path = iEsAnalysisBuilder.getField().substring(0, iEsAnalysisBuilder.getField().indexOf("."));
+                iEsAnalysisBuilder.setPath(path);
+            }
+            iEsAnalysisBuilder.setValues(values);
 
-                Aggregate agg = response.aggregations().get("Agg");
-                if (dateList.contains(field)) {
-                    this.getDateAnalysisDTOS(agg, field, value, topN, detailDTOS);
-                } else if (nestedList.contains(field)) {
-                    this.getNestedCountDTOS(agg, field, detailDTOS);
-                } else if (childList.contains(field)) {
+            Aggregation aggregation = iEsAnalysisBuilder.createAnalyseAgg();
+            builder.aggregations("Agg", aggregation);
+            SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+
+            Aggregate agg = response.aggregations().get("Agg");
+            if (dateList.contains(field)) {
+//                this.getDateAnalysisDTOS(agg, field, value, topN, detailDTOS);
+            } else if (nestedList.contains(field)) {
+                this.getNestedCountDTOS(agg, field, detailDTOS);
+            } else if (childList.contains(field)) {
+                for (String value : values) {
                     this.getChildAnalysisDTOS(agg, field, value, detailDTOS);
-                } else if (numberList.contains(field)) {
-                    this.getNumberAnalysisDTOS(agg, field, value, detailDTOS);
-                } else {
-                    this.getTermCountDTOS(agg, field, detailDTOS);
                 }
+            } else if (numberList.contains(field)) {
+//                for (String value : values) {
+//                    this.getNumberAnalysisDTOS(agg, field, value, detailDTOS);
+//                }
+            } else {
+                this.getTermCountDTOS(agg, field, detailDTOS);
             }
         }
         esCountDTO.setDetailDTOS(detailDTOS);
@@ -255,6 +259,7 @@ public class EsCountService {
         Integer topN = vo.getTopN();
         Boolean ifHaveChild = vo.getIfHaveChild();
         String field = vo.getField();
+        Integer fieldType = vo.getFieldType();
         Aggregation aggregation = null;
 
         builder.index("patent");
@@ -269,6 +274,7 @@ public class EsCountService {
             iEsCountBuilder.setValueTwo(valueTwo);
             iEsCountBuilder.setTopN(topN);
             iEsCountBuilder.setIfHaveChild(ifHaveChild);
+            iEsCountBuilder.setFieldType(String.valueOf(fieldType));
             if (iEsCountBuilder.getField().contains(".")) {
                 String path = iEsCountBuilder.getField().substring(0, iEsCountBuilder.getField().indexOf("."));
                 iEsCountBuilder.setPath(path);
@@ -392,17 +398,14 @@ public class EsCountService {
      * @param value
      * @param detailDTOS
      */
-    public void getNumberAnalysisDTOS(Aggregate agg, String field,String value, List<EsCountDetailDTO> detailDTOS) {
-        List<RangeBucket> list = agg.range().buckets().array();
-        list.forEach(bucket -> {
-            EsCountDetailDTO dto = new EsCountDetailDTO();
-            dto.setField(field);
-            dto.setName(value);
-            dto.setNumber(bucket.docCount());
-            if (dto.getNumber() > 0) {
-                detailDTOS.add(dto);
-            }
-        });
+    public void getNumberAnalysisDTOS(Aggregate agg, String field, String value, List<EsCountDetailDTO> detailDTOS) {
+        EsCountDetailDTO dto = new EsCountDetailDTO();
+        dto.setField(field);
+        dto.setName(value);
+        dto.setNumber(agg.filter().docCount());
+        if (dto.getNumber() > 0) {
+            detailDTOS.add(dto);
+        }
     }
 
     /**

+ 12 - 0
src/main/resources/jsons/esCount.json

@@ -324,6 +324,18 @@
     "ifAsCondition": "true"
   },
   {
+    "name": "自定义栏位类型",
+    "type": "String",
+    "value": "fieldType",
+    "field": "fieldType",
+    "esField": "custom_field.field_type",
+    "esClass": "childCountBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true"
+  },
+  {
     "name": "自定义栏位统计值",
     "type": "String",
     "value": "statsValue",