Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

xiexiang 1 tahun lalu
induk
melakukan
dc15e4611c

+ 2 - 3
src/main/java/cn/cslg/pas/common/utils/GenerateObjectUtil.java

@@ -3,7 +3,6 @@ package cn.cslg.pas.common.utils;
 import cn.cslg.pas.common.dto.DomainFieldDTO;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.cglib.beans.BeanGenerator;
 import org.springframework.stereotype.Component;
 
@@ -14,7 +13,7 @@ import java.util.Map;
 @Component
 public class GenerateObjectUtil {
 
-    public static Object generateObjectByField(List<DomainFieldDTO> domainFieldDTOS) throws Exception {
+    /*public static Object generateObjectByField(List<DomainFieldDTO> domainFieldDTOS) throws Exception {
         BeanGenerator generator = new BeanGenerator();
         for (DomainFieldDTO domainFieldDTO : domainFieldDTOS) {
             generator.addProperty(domainFieldDTO.getField(), java.lang.String.class);
@@ -30,7 +29,7 @@ public class GenerateObjectUtil {
         String gsonString = JSONObject.toJSONString(obj).replace("$cglib_prop_", "");
         return JSON.parseObject(gsonString, Object.class);
 
-    }
+    }*/
 
     public static void setObjectProperty(Object obj, String propertyName, Object value) throws Exception {
         String setMethodName = "set" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);

+ 65 - 9
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -24,10 +24,13 @@ import cn.cslg.pas.service.common.PatentStarApiService;
 import cn.cslg.pas.service.query.FormatQueryService;
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.SortOrder;
+import co.elastic.clients.elasticsearch._types.aggregations.*;
 import co.elastic.clients.elasticsearch._types.query_dsl.*;
 import co.elastic.clients.elasticsearch.core.*;
 import co.elastic.clients.elasticsearch.core.search.Hit;
+import co.elastic.clients.json.JsonData;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
@@ -128,6 +131,7 @@ public class EsService {
         Integer projectId = queryRequest.getProjectId();
         Long current = queryRequest.getCurrent();
         Long size = queryRequest.getSize();
+        String groupField = queryRequest.getGroupField();
         //判断表达式
         if (queryRequest instanceof StringRequest) {
             searchCondition = ((StringRequest) queryRequest).getSearchQuery();
@@ -172,8 +176,38 @@ public class EsService {
         //格式化检索式
         //3. 从es中检索数据
         Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent");
-        //4. 返回数据
-        builder.query(q);
+        //判断同族分组
+        if (StringUtils.isNotEmpty(groupField)) {
+            String str = "";
+            switch (groupField) {
+                case "simpleFamilyId":
+                    str = "simple_family_id";
+                    break;
+                case "inpadocFamilyId":
+                    str = "inpadoc_family_id";
+                    break;
+                case "patsnapFamilyId":
+                    str = "patsnap_family_id";
+                    break;
+            }
+            String esField = str;
+            Aggregation hits = AggregationBuilders.topHits(i -> i.size(1));
+            Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
+                    .field(esField).build())
+                    .aggregations(new HashMap() {{
+                        put("hitAgg", hits);
+                    }}).build();
+            Aggregation filtersAgg = new Aggregation.Builder().filters(new FiltersAggregation.Builder()
+                    .filters(i -> i.array(Arrays.asList(q))).build())
+                    .aggregations(new HashMap() {{
+                        put("filtersAgg", aggregation);
+                    }}).build();
+            builder.aggregations("Agg", filtersAgg);
+        } else {
+            //4. 返回数据
+            builder.query(q);
+        }
+
         //排序
         List<OrderDTO> dtoList = queryRequest.getOrderDTOList();
         if (!CollectionUtils.isEmpty(dtoList)) {
@@ -206,15 +240,37 @@ public class EsService {
 
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         List<PatentColumnDTO> list = new ArrayList<>();
-        List<Hit<Patent>> hits = response.hits().hits();
-        long total = response.hits().total().value();
-        for (Hit<Patent> hit : hits) {
-            Patent esMess = hit.source();
-            PatentColumnDTO columnDTO = new PatentColumnDTO();
+        long total = 0L;
+        if (StringUtils.isNotEmpty(groupField)) {
+            Aggregate agg = response.aggregations().get("Agg");
+            List<FiltersBucket> buckets = agg.filters().buckets().array();
+            for (FiltersBucket bucket : buckets) {
+                Aggregate filtersAgg = bucket.aggregations().get("filtersAgg");
+                List<StringTermsBucket> termsBuckets = filtersAgg.sterms().buckets().array();
+                for (StringTermsBucket termsBucket : termsBuckets) {
+                    Aggregate hitAgg = termsBucket.aggregations().get("hitAgg");
+                    total = hitAgg.topHits().hits().total().value();
+                    List<Hit<JsonData>> hits = hitAgg.topHits().hits().hits();
+                    hits.forEach(hit -> {
+                        JsonData data = hit.source();
+                        Patent patent1 = JSONObject.parseObject(String.valueOf(data), Patent.class);
+                        PatentColumnDTO columnDTO = new PatentColumnDTO();
+                        BeanUtils.copyProperties(patent1, columnDTO);
+                        list.add(columnDTO);
+                    });
+                }
+            }
+        } else {
+            List<Hit<Patent>> hits = response.hits().hits();
+            total = response.hits().total().value();
+            for (Hit<Patent> hit : hits) {
+                Patent esMess = hit.source();
+                PatentColumnDTO columnDTO = new PatentColumnDTO();
 //            columnDTO.setPatentNo(esMess.getPatentNo());
-            BeanUtils.copyProperties(esMess, columnDTO);
-            list.add(columnDTO);
+                BeanUtils.copyProperties(esMess, columnDTO);
+                list.add(columnDTO);
 
+            }
         }
         this.loadCoulumnDTO(list);
         dto.setTotal(total);