Selaa lähdekoodia

es统计分析termAgg

zero 2 vuotta sitten
vanhempi
commit
d9bcee43d5

+ 44 - 0
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/IEsCountAnalysisBuilder.java

@@ -6,7 +6,51 @@ import java.util.ArrayList;
 import java.util.List;
 
 public interface IEsCountAnalysisBuilder {
+    public String field = "";
+    public String valueOne = "";
+    public String valueTwo = "";
+    public Integer topN = 10;
+    public String path = "";
+    public Boolean ifHaveChild = false;
+    public String fieldType = null;
+    public String fieldId = null;
+    public List<String> values = new ArrayList<>();
 
     public Aggregation createCountAnalyseAgg() throws Exception;
 
+    public String getField();
+
+    public void setField(String field);
+
+    public String getValueOne();
+
+    public void setValueOne(String valueOne);
+
+    public String getValueTwo();
+
+    public void setValueTwo(String valueTwo);
+
+    public Integer getTopN();
+
+    public void setTopN(Integer topN);
+
+    public String getPath();
+
+    public void setPath(String path);
+
+    public Boolean getIfHaveChild();
+
+    public void setIfHaveChild(Boolean ifHaveChild);
+    public String getFieldType();
+
+    public void setFieldType(String fieldType);
+
+    public String getFieldId();
+
+    public void setFieldId(String fieldId);
+
+    public List<String> getValues();
+
+    public void setValues(List<String> values);
+
 }

+ 128 - 0
src/main/java/cn/cslg/pas/factorys/EsCountAnalyseBuilderFactory/NestedCountAnalysisBuilder.java

@@ -0,0 +1,128 @@
+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.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 NestedCountAnalysisBuilder implements IEsCountAnalysisBuilder {
+    public String field = "";
+    public String valueOne = "";
+    public String valueTwo = "";
+    public Integer topN = 10;
+    public String path = "";
+    public Boolean ifHaveChild = false;
+    public String fieldType = null;
+    public String fieldId = null;
+    public List<String> values = new ArrayList<>();
+
+    @Override
+    public Aggregation createCountAnalyseAgg() throws Exception {
+        Aggregation terms = null;
+        if (StringUtils.isNotEmpty(valueOne)) {
+            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();
+        } else if (!CollectionUtils.isEmpty(values)) {
+            terms = AggregationBuilders.terms(i -> i.field(field).include(j -> j.terms(values)).size(topN));
+        } else {
+            terms = AggregationBuilders.terms(j -> j.field(field).size(topN));
+        }
+        Aggregation finalTerms = terms;
+        Aggregation aggregation = new Aggregation.Builder().nested(new NestedAggregation.Builder().
+                path(path).build())
+                .aggregations(new HashMap() {{
+                    put("terms_agg", finalTerms);
+                }}).build();
+        return aggregation;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValueOne() {
+        return valueOne;
+    }
+
+    public void setValueOne(String valueOne) {
+        this.valueOne = valueOne;
+    }
+
+    public String getValueTwo() {
+        return valueTwo;
+    }
+
+    public void setValueTwo(String valueTwo) {
+        this.valueTwo = valueTwo;
+    }
+
+    public Integer getTopN() {
+        return topN;
+    }
+
+    public void setTopN(Integer topN) {
+        this.topN = topN;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public Boolean getIfHaveChild() {
+        return ifHaveChild;
+    }
+
+    public void setIfHaveChild(Boolean ifHaveChild) {
+        this.ifHaveChild = ifHaveChild;
+    }
+
+    public String getFieldType() {
+        return fieldType;
+    }
+
+    public void setFieldType(String fieldType) {
+        this.fieldType = fieldType;
+    }
+
+    public String getFieldId() {
+        return fieldId;
+    }
+
+    public void setFieldId(String fieldId) {
+        this.fieldId = fieldId;
+    }
+
+    public List<String> getValues() {
+        return values;
+    }
+
+    public void setValues(List<String> values) {
+        this.values = values;
+    }
+
+}

+ 2 - 2
src/main/resources/jsons/esAnalysis.json

@@ -17,7 +17,7 @@
     "value": "ipcLevel2",
     "field": "IC2",
     "esField": "mipc.level2",
-    "esClass": "termsAnalysisBuilder",
+    "esClass": "termsCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
     "ifShow": "true",
@@ -197,7 +197,7 @@
     "value": "applicant",
     "field": "PA",
     "esField": "applicant.name.key",
-    "esClass": "nestedAnalysisBuilder",
+    "esClass": "nestedCountAnalysisBuilder",
     "ifSearch": "false",
     "ifGroup": "false",
     "ifShow": "true",