ソースを参照

Merge remote-tracking branch 'origin/master'

lwhhszx 1 年間 前
コミット
a2f9f5b6ba

+ 26 - 10
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -702,11 +702,15 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                         }}).build();
                 builder.aggregations("Agg", aggregation);
 
-                Aggregation cardinality = AggregationBuilders.cardinality(i -> i.field("merge_applicant.name.raw"));
+                //对聚合结果统计出总数
+                Aggregation terms = AggregationBuilders.terms(i -> i.field("merge_applicant.name.raw").size(100000));
+                BucketsPath bucketsPath = BucketsPath.of(i -> i.single("terms>_count"));
+                Aggregation statsBucket = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath));
                 Aggregation totalAgg = new Aggregation.Builder().nested(new NestedAggregation.Builder().
                         path("merge_applicant").build())
                         .aggregations(new HashMap() {{
-                            put("total", cardinality);
+                            put("terms", terms);
+                            put("statsBucket", statsBucket);
                         }}).build();
                 builder.aggregations("totalAgg", totalAgg);
 
@@ -735,11 +739,15 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                         }}).build();
                 builder.aggregations("Agg", aggregation);
 
-                Aggregation cardinality = AggregationBuilders.cardinality(i -> i.field("merge_inventor.name.raw"));
+                //对聚合结果统计出总数
+                Aggregation terms = AggregationBuilders.terms(i -> i.field("merge_inventor.name.raw").size(100000));
+                BucketsPath bucketsPath = BucketsPath.of(i -> i.single("terms>_count"));
+                Aggregation statsBucket = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath));
                 Aggregation totalAgg = new Aggregation.Builder().nested(new NestedAggregation.Builder().
                         path("merge_inventor").build())
                         .aggregations(new HashMap() {{
-                            put("total", cardinality);
+                            put("terms", terms);
+                            put("statsBucket", statsBucket);
                         }}).build();
                 builder.aggregations("totalAgg", totalAgg);
             }
@@ -764,11 +772,15 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                         }}).build();
                 builder.aggregations("Agg", aggregation);
 
-                Aggregation cardinality = AggregationBuilders.cardinality(i -> i.field("merge_applicant.name.raw"));
+                //对聚合结果统计出总数
+                Aggregation terms = AggregationBuilders.terms(i -> i.field("merge_applicant.name.raw").size(100000));
+                BucketsPath bucketsPath = BucketsPath.of(i -> i.single("terms>_count"));
+                Aggregation statsBucket = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath));
                 Aggregation totalAgg = new Aggregation.Builder().nested(new NestedAggregation.Builder().
                         path("merge_applicant").build())
                         .aggregations(new HashMap() {{
-                            put("total", cardinality);
+                            put("terms", terms);
+                            put("statsBucket", statsBucket);
                         }}).build();
                 builder.aggregations("totalAgg", totalAgg);
 
@@ -800,11 +812,15 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                         }}).build();
                 builder.aggregations("Agg", aggregation);
 
-                Aggregation cardinality = AggregationBuilders.cardinality(i -> i.field("merge_inventor.name.raw"));
+                //对聚合结果统计出总数
+                Aggregation terms = AggregationBuilders.terms(i -> i.field("merge_inventor.name.raw").size(100000));
+                BucketsPath bucketsPath = BucketsPath.of(i -> i.single("terms>_count"));
+                Aggregation statsBucket = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath));
                 Aggregation totalAgg = new Aggregation.Builder().nested(new NestedAggregation.Builder().
                         path("merge_inventor").build())
                         .aggregations(new HashMap() {{
-                            put("total", cardinality);
+                            put("terms", terms);
+                            put("statsBucket", statsBucket);
                         }}).build();
                 builder.aggregations("totalAgg", totalAgg);
             }
@@ -813,8 +829,8 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         builder.trackTotalHits(i -> i.enabled(true));
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         Aggregate totalAgg = response.aggregations().get("totalAgg");
-        Aggregate totalAggregate = totalAgg.nested().aggregations().get("total");
-        long total = totalAggregate.cardinality().value();
+        Aggregate totalAggregate = totalAgg.nested().aggregations().get("statsBucket");
+        long total = totalAggregate.statsBucket().count();
         List<String> mergeList = new ArrayList<>();
         Aggregate agg = response.aggregations().get("Agg");
         Aggregate nestedAgg = agg.nested().aggregations().get("nestedAgg");

+ 32 - 17
src/main/java/cn/cslg/pas/service/business/es/EsService.java

@@ -195,17 +195,19 @@ public class EsService {
             List<SortOptions> options = new ArrayList<>();
             SortOptions appDate = SortOptions.of(i -> i.field(j -> j.field("app_date").order(SortOrder.Asc)));
             options.add(appDate);
-            Aggregation hits = AggregationBuilders.topHits(i -> i.size(1).sort(options));
+            Aggregation bucketSort = AggregationBuilders.bucketSort(i -> i.from((current.intValue() - 1) * size.intValue()).size(size.intValue()));
             Aggregation aggregation = new Aggregation.Builder().terms(new TermsAggregation.Builder()
-                    .field(esField).size(10).build())
+                    .field(esField).size(100000).build())
                     .aggregations(new HashMap() {{
-                        put("hitAgg", hits);
+                        put("hitAgg", bucketSort);
                     }}).build();
-//            Aggregation filterAgg = new Aggregation.Builder().filter(i -> i.bool(j -> j.must(q)))
-//                    .aggregations(new HashMap() {{
-//                        put("filterAgg", aggregation);
-//                    }}).build();
             builder.aggregations("Agg", aggregation);
+            //对聚合结果统计出总数
+            Aggregation terms = AggregationBuilders.terms(i -> i.field(esField).size(100000));
+            builder.aggregations("termAgg", terms);
+            BucketsPath bucketsPath = BucketsPath.of(i -> i.single("termAgg>_count"));
+            Aggregation statsBucket = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath));
+            builder.aggregations("statsBucket", statsBucket);
         }
 
         //排序
@@ -245,19 +247,14 @@ public class EsService {
         List<PatentColumnDTO> list = new ArrayList<>();
         long total = 0L;
         if (StringUtils.isNotEmpty(esField)) {
+            Aggregate statsAgg = response.aggregations().get("statsBucket");
+            total = statsAgg.statsBucket().count();
             Aggregate agg = response.aggregations().get("Agg");
             List<StringTermsBucket> termsBuckets = agg.sterms().buckets().array();
-            total = Long.valueOf(String.valueOf(termsBuckets.size()));
             for (StringTermsBucket termsBucket : termsBuckets) {
-                Aggregate hitAgg = termsBucket.aggregations().get("hitAgg");
-                List<Hit<JsonData>> hits = hitAgg.topHits().hits().hits();
-                hits.forEach(hit -> {
-                    String id = hit.id();
-                    JsonData data = hit.source();
-                    Patent patent1 = JSONObject.parseObject(String.valueOf(data), Patent.class);
-                    PatentColumnDTO columnDTO = this.getPatentColumnDTO(patent1, projectId, id);
-                    list.add(columnDTO);
-                });
+                String key = termsBucket.key().stringValue();
+                PatentColumnDTO columnDTO = this.getPatentColumnDTO(key, projectId,esField);
+                list.add(columnDTO);
             }
         } else {
             List<Hit<Patent>> hits = response.hits().hits();
@@ -277,6 +274,24 @@ public class EsService {
         return dto;
     }
 
+    //封装专利清单的同族分组
+    public PatentColumnDTO getPatentColumnDTO(String key, Integer projectId, String field) throws Exception {
+        PatentColumnDTO dto = new PatentColumnDTO();
+        SearchRequest.Builder builder = new SearchRequest.Builder();
+        //设置查询索引
+        builder.index("patent");
+        Query query = QueryBuilders.term(i -> i.field(field).value(key));
+        builder.query(query);
+        SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
+        List<Hit<Patent>> hits = response.hits().hits();
+        if (!CollectionUtils.isEmpty(hits)) {
+            String id = hits.get(0).id();
+            Patent patent = hits.get(0).source();
+            dto = this.getPatentColumnDTO(patent, projectId, id);
+        }
+        return dto;
+    }
+
     //装载专利清单列表的数据
     public PatentColumnDTO getPatentColumnDTO(Patent patent, Integer projectId, String id) {
         PatentColumnDTO columnDTO = new PatentColumnDTO();