Parcourir la source

Merge remote-tracking branch 'origin/master'

lwhhszx il y a 1 an
Parent
commit
25d0ec823a

+ 91 - 0
src/main/java/cn/cslg/pas/factorys/EsCountBuilderFactory/ChildCountBuilder.java

@@ -0,0 +1,91 @@
+package cn.cslg.pas.factorys.EsCountBuilderFactory;
+
+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;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+
+@Component
+public class ChildCountBuilder implements IEsCountBuilder{
+    public String field = "";
+    public String valueOne = "";
+    public String valueTwo = "";
+    public Integer topN = 10;
+    public String path = "";
+
+    @Override
+    public Aggregation createAggregation() {
+        Aggregation terms = AggregationBuilders.terms(j -> j.field(field).size(topN));
+        if (StringUtils.isNotEmpty(valueOne)) {
+            String str = "*";
+            String s = str.concat(valueOne).concat("*");
+            Query query = QueryBuilders.wildcard(i -> i.field(field).value(s));
+//            Query query = QueryBuilders.term(j -> j.field(field).value(valueOne));
+            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 finalTerms = terms;
+        Aggregation aggregation = new Aggregation.Builder().children(new ChildrenAggregation.Builder()
+                .type("project_customfield").build()).aggregations(new HashMap() {{
+            put("child_agg", finalTerms);
+        }}).build();
+        return aggregation;
+    }
+
+    @Override
+    public String getField() {
+        return field;
+    }
+
+    @Override
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    @Override
+    public String getValueOne() {
+        return valueOne;
+    }
+
+    @Override
+    public void setValueOne(String valueOne) {
+        this.valueOne = valueOne;
+    }
+
+    @Override
+    public String getValueTwo() {
+        return valueTwo;
+    }
+
+    @Override
+    public void setValueTwo(String valueTwo) {
+        this.valueTwo = valueTwo;
+    }
+
+    @Override
+    public Integer getTopN() {
+        return topN;
+    }
+
+    @Override
+    public void setTopN(Integer topN) {
+        this.topN = topN;
+    }
+
+    @Override
+    public String getPath() {
+        return path;
+    }
+
+    @Override
+    public void setPath(String path) {
+        this.path = path;
+    }
+}

+ 17 - 2
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -29,7 +29,7 @@ import java.util.stream.Collectors;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsCountService {
-    private final List<String> termList = Arrays.asList();
+    private final List<String> childList = Arrays.asList("childRaw");
     private final List<String> nestedList = Arrays.asList("PA", "IN", "PE");
     private final List<String> dateList = Arrays.asList("PD", "AD");
 
@@ -76,7 +76,6 @@ public class EsCountService {
             builder.aggregations("Agg", aggregation);
             SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
             Aggregate agg = response.aggregations().get("Agg");
-            List<EsCountDetailDTO> countDetailDTOS = new ArrayList<>();
             if (dateList.contains(field)) {
                 List<DateHistogramBucket> list = agg.dateHistogram().buckets().array();
                 List<EsCountDetailDTO> esCountDetailDTOS = new ArrayList<>();
@@ -113,6 +112,22 @@ public class EsCountService {
                         detailDTOS.add(dto);
                     }
                 });
+            } else if (childList.contains(field)) {
+                Aggregate childAgg = agg.children().aggregations().get("child_agg");
+                List<StringTermsBucket> list = childAgg.sterms().buckets().array();
+                list.forEach(bucket -> {
+                    EsCountDetailDTO dto = new EsCountDetailDTO();
+                    dto.setField(field);
+                    Aggregate aggregate = bucket.aggregations().get("filter_agg");
+                    dto.setName(bucket.key().stringValue());
+                    dto.setNumber(bucket.docCount());
+                    if (aggregate != null) {
+                        dto.setNumber(aggregate.filter().docCount());
+                    }
+                    if (dto.getNumber() > 0) {
+                        detailDTOS.add(dto);
+                    }
+                });
             } else {
                 List<StringTermsBucket> list = agg.sterms().buckets().array();
                 list.forEach(bucket -> {

+ 4 - 2
src/main/java/cn/cslg/pas/service/business/es/EsCustomFieldService.java

@@ -208,9 +208,11 @@ public class EsCustomFieldService {
             esCustomFieldHistory.setPersonId("1");
             esCustomFieldHistory.setProjectId(projectId);
             esCustomFieldHistory.setCustomFieldId(id);
-            this.addCustomFieldHistory(esCustomFieldHistory);
+            String a = this.addCustomFieldHistory(esCustomFieldHistory);
+            System.out.println("---" + a);
         } else {
-            this.addEsCustomFieldToEs(esCustomField, patentNo);
+            String b = this.addEsCustomFieldToEs(esCustomField, patentNo);
+            System.out.println("+++++++++" + b);
         }
     }
 

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

@@ -310,5 +310,18 @@
     "ifGroup": "false",
     "ifShow": "true",
     "ifAsCondition": "true"
+  },
+  {
+    "name": "子文档统计",
+    "type": "String",
+    "value": "childRaw",
+    "field": "childRaw",
+    "esField": "custom_field.stats_value.raw",
+    "esClass": "childCountBuilder",
+    "ifSearch": "false",
+    "ifGroup": "false",
+    "ifShow": "true",
+    "ifAsCondition": "true"
   }
+
 ]

+ 5 - 5
src/test/java/cn/cslg/pas/service/EventServiceTests.java

@@ -228,10 +228,10 @@ public class EventServiceTests {
         List<EsCountVO> countVOS = new ArrayList<>();
 
         EsCountVO vo1 = new EsCountVO();
-        vo1.setField("PA");
+        vo1.setField("childRaw");
 //        vo.setField("CO");
 //        vo.setField("PT");
-        vo1.setValueOne("国家电网公司");
+//        vo1.setValueOne("国家电网公司");
 //        vo.setValueOne("2022");
 //        vo.setValueTwo("2024");
 //        vo.setField("AD");
@@ -276,10 +276,10 @@ public class EventServiceTests {
     @Test
     void test15() throws Exception {
         EsCustomFieldDTO dto = new EsCustomFieldDTO();
-        dto.setProjectId(77);
+        dto.setProjectId(83);
         dto.setFieldType(6);
-        dto.setFieldId("z147258369");
-        dto.setFieldValue(Arrays.asList("77"));
+        dto.setFieldId("101");
+        dto.setFieldValue(Arrays.asList("1010"));
         dto.setOptionType(1);
         dto.setPatentNo("CN201910069334.7");
         esCustomFieldService.addCustomField(dto);