فهرست منبع

检索统计调试

zero 1 سال پیش
والد
کامیت
1fd4fa199b

+ 5 - 0
src/main/java/cn/cslg/pas/common/dto/es/EsCustomFieldValueDTO.java

@@ -28,4 +28,9 @@ public class EsCustomFieldValueDTO {
      */
     Boolean ifHaveChild = false;
 
+    /**
+     * 栏位类型
+     */
+    private String fieldType;
+
 }

+ 54 - 2
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/CustomChildQueryBuilder.java

@@ -2,6 +2,7 @@ package cn.cslg.pas.factorys.EsBuilderFactory;
 
 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.springframework.stereotype.Component;
 
 import java.text.ParseException;
@@ -12,11 +13,54 @@ public class CustomChildQueryBuilder implements IQueryBuilder {
     private String value = "";
     private String operator = "";
     public String path = "";
+    public String fieldType = "";
 
     @Override
     public Query creteQuery() throws ParseException {
-        return QueryBuilders.hasChild(i -> i.type("project_customfield")
-                .query(j -> j.term(n -> n.field(field).value(value))));
+        Query q = null;
+        //自定义栏位日期和数字类型
+        if (field.equals("custom_field.field_type")) {
+            fieldType = value;
+        }
+        if ((fieldType.equals("0") || fieldType.equals("1")) && field.equals("custom_field.field_value.raw")) {
+            if (fieldType.equals("0")) {
+                if (value.contains("-")) {
+                    String frontPart = value.substring(0, value.indexOf("-"));
+                    String afterPart = value.substring(value.indexOf("-") + 1);
+                    q = QueryBuilders.range(n -> n.field(field).gte(JsonData.of(frontPart)).lte(JsonData.of(afterPart)));
+                } else {
+                    q = QueryBuilders.term(n -> n.field(field).value(value));
+                }
+            } else {
+                if (value.contains("-")) {
+
+                } else {
+
+                }
+            }
+        } else if ((fieldType.equals("0") || fieldType.equals("1")) && field.equals("custom_field.stats_value.raw")) {
+            if (fieldType.equals("0")) {
+                if (value.contains("-")) {
+                    String frontPart = value.substring(0, value.indexOf("-"));
+                    String afterPart = value.substring(value.indexOf("-") + 1);
+                    q = QueryBuilders.range(n -> n.field(field).gte(JsonData.of(frontPart)).lte(JsonData.of(afterPart)));
+                } else {
+                    q = QueryBuilders.term(n -> n.field(field).value(value));
+                }
+            } else {
+                if (value.contains("-")) {
+
+                } else {
+
+                }
+            }
+        } else {
+            q = QueryBuilders.term(n -> n.field(field).value(value));
+        }
+        Query finalQ = q;
+        Query query = QueryBuilders.hasChild(i -> i.type("project_customfield")
+                .query(finalQ));
+        return query;
     }
 
     @Override
@@ -58,4 +102,12 @@ public class CustomChildQueryBuilder implements IQueryBuilder {
     public void setPath(String path) {
         this.path = path;
     }
+
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
 }

+ 0 - 1
src/main/java/cn/cslg/pas/factorys/EsBuilderFactory/IQueryBuilder.java

@@ -1,6 +1,5 @@
 package cn.cslg.pas.factorys.EsBuilderFactory;
 
-import cn.cslg.pas.common.model.cronModel.SqlObject;
 import co.elastic.clients.elasticsearch._types.query_dsl.Query;
 
 import java.text.ParseException;

+ 6 - 2
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/ChildCountAnalysisBuilder.java

@@ -20,6 +20,7 @@ public class ChildCountAnalysisBuilder implements IEsCountAnalysisBuilder {
     public Integer topN = 10;
     public String path = "";
     public Boolean ifHaveChild = false;
+    //0数字,1日期,2文本,4单选,5多选,6树,7产品8产品类别9技术分类
     public String fieldType = null;
     public String fieldId = null;
     private String format;
@@ -30,9 +31,7 @@ public class ChildCountAnalysisBuilder implements IEsCountAnalysisBuilder {
         Aggregation aggregation = null;
         List<Query> queryList = new ArrayList<>();
         Query q1 = QueryBuilders.term(i -> i.field("custom_field.field").value(fieldId));
-//        Query q2 = QueryBuilders.term(i -> i.field("custom_field.field_type").value(fieldType));
         queryList.add(q1);
-//        queryList.add(q2);
         Aggregation termAgg = null;
         if (ifHaveChild) {
 
@@ -70,6 +69,11 @@ public class ChildCountAnalysisBuilder implements IEsCountAnalysisBuilder {
                     queryList.add(query);
                 } else if (StringUtils.isNotEmpty(valueOne) && StringUtils.isNotEmpty(valueTwo)) {
                     //日期/数字
+                    if (fieldType.equals(0)) {
+
+                    } else if (fieldType.equals(1)) {
+
+                    }
                     String start = valueOne.substring(0, valueOne.indexOf("-"));
                     String end = valueOne.substring(valueOne.indexOf("-") + 1);
                     Query query = QueryBuilders.range(range -> range.field("custom_field.field_value.raw")

+ 22 - 7
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -36,11 +36,9 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class EsCountService {
     private final List<String> childList = Arrays.asList("field");
-    private final List<String> nestedList = Arrays.asList("applicant", "inventor", "rightHolder", "standerApplicant",
-            "mergeApplicant", "standerRightHolder", "mergeRightHolder");
-    private final List<String> dateList = Arrays.asList("publicDate", "appDate", "grantDate");
-    private final List<String> numberList = Arrays.asList("quotePatentNoNum", "quotedPatentNoNum", "simpleFamilyNum",
-            "inpadocFamilyNum", "patsnapFamilyNum");
+    private final List<String> nestedList = Arrays.asList("PA", "IN", "PE", "SAT", "MAT", "SRH", "MRH");
+    private final List<String> dateList = Arrays.asList("PD", "AD", "GD");
+    private final List<String> numberList = Arrays.asList("QPN", "QDPN", "SFN", "IFN", "PFN");
 
 
     private final ElasticsearchClient client;
@@ -513,6 +511,18 @@ public class EsCountService {
                     .sorted(Comparator.comparing(EsCountDetailDTO::getName).reversed()).limit(topN).collect(Collectors.toList());
             detailDTOS.addAll(collect);
         }
+
+        EsCountDetailDTO countDTO = new EsCountDetailDTO();
+        countDTO.setField(field);
+        countDTO.setName("其他");
+        if (list.size() > topN) {
+            countDTO.setNumber((long)(list.size() - topN));
+
+        } else {
+            countDTO.setNumber((long)0);
+        }
+        countDTO.setTopN(topN);
+        detailDTOS.add(countDTO);
     }
 
     /**
@@ -525,7 +535,6 @@ public class EsCountService {
      */
     public void getDateAnalysisDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS,EsCountDTO esCountDTO) {
         List<RangeBucket> list1 = agg.dateRange().buckets().array();
-//        esCountDTO.setAllNumber(Long.valueOf(String.valueOf(list1.size())));
         List<EsCountDetailDTO> esCountDetailDTOS = new ArrayList<>();
         for (RangeBucket bucket : list1) {
             EsCountDetailDTO dto = new EsCountDetailDTO();
@@ -551,8 +560,14 @@ public class EsCountService {
      * @param field
      * @param detailDTOS
      */
-    public void getNestedCountDTOS(Aggregate agg, String field,Integer topN, List<EsCountDetailDTO> detailDTOS) {
+    public void getNestedCountDTOS(Aggregate agg, String field, Integer topN, List<EsCountDetailDTO> detailDTOS) {
         Aggregate termsAgg = agg.nested().aggregations().get("terms_agg");
+        EsCountDetailDTO countDTO = new EsCountDetailDTO();
+        countDTO.setField(field);
+        countDTO.setName("其他");
+        countDTO.setNumber(termsAgg.sterms().sumOtherDocCount());
+        countDTO.setTopN(topN);
+        detailDTOS.add(countDTO);
         List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
         list.forEach(bucket -> {
             EsCountDetailDTO dto = new EsCountDetailDTO();

+ 12 - 0
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -266,6 +266,18 @@ public class EsService {
 
     public void appendStr(EsCustomFieldValueDTO customField, StringBuilder builder, int m, boolean ifHaveChild) {
         builder.append("field").append("=").append(customField.getFieldId());
+        String fieldType = customField.getFieldType();
+        if (StringUtils.isNotEmpty(fieldType)) {
+            if (fieldType.equals("Integer")) {
+                fieldType = "0";
+                builder.append(" ").append("and").append(" ")
+                        .append("fieldType").append("=").append(fieldType);
+            } else if (fieldType.equals("DateTime")) {
+                fieldType = "1";
+                builder.append(" ").append("and").append(" ")
+                        .append("fieldType").append("=").append(fieldType);
+            }
+        }
         List<String> values = customField.getFieldValue();
         if (!CollectionUtils.isEmpty(values)) {
             builder.append(" ").append("and").append(" ");

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

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

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

@@ -376,7 +376,6 @@ public class EventServiceTests {
 @Test
     public void aaaaa() throws Exception {
         String searchCondition = "AD=[2008~201009]";
-
         treeNode tree = expressManager.getInstance().Parse(searchCondition, false);
 System.out.println(tree);
     }