chenyi 1 năm trước cách đây
mục cha
commit
19fd1c9f35

+ 36 - 6
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -530,18 +530,27 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
         Aggregate totalAgg = response.aggregations().get("totalAgg");
         Aggregate totalAggregate = totalAgg.nested().aggregations().get("statsBucket");
+        Aggregate totalAgg1 = response.aggregations().get("totalAgg1");
+        Aggregate totalAggregate1 = totalAgg1.nested().aggregations().get("statsBucket1");
         long total = totalAggregate.statsBucket().count();
+        if (type == 0) {
+            long count = totalAggregate1.statsBucket().count();
+            total = Math.max(total, count);
+        }
 
         List<String> mergeList = new ArrayList<>();
         if (StringUtils.isNotEmpty(condition)) {
             Aggregate terms = totalAgg.nested().aggregations().get("terms");
+            Aggregate terms1 = totalAgg1.nested().aggregations().get("terms1");
             List<StringTermsBucket> termsBucketList = terms.sterms().buckets().array();
+            List<StringTermsBucket> termsBucketList1 = terms1.sterms().buckets().array();
+            termsBucketList.addAll(termsBucketList1);
             if (condition.contains("AND") && operate.equals("AND")) {
                 String[] parts = condition.split(" AND ");
                 for (String part : parts) {
                     List<String> expresses = getConditionExpress(part);
                     List<String> merges = termsBucketList.stream().map(StringTermsBucket::key).map(FieldValue::stringValue)
-                            .filter(value -> expresses.stream().anyMatch(express -> value.contains(express)))
+                            .distinct().filter(value -> expresses.stream().anyMatch(express -> value.contains(express)))
                             .collect(Collectors.toList());
                     total = total > merges.size() ? merges.size() : total;
                     merges = merges.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
@@ -650,18 +659,27 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
             Aggregate agg = response.aggregations().get("Agg");
             Aggregate nestedAgg = agg.nested().aggregations().get("nestedAgg");
             List<StringTermsBucket> buckets = nestedAgg.sterms().buckets().array();
-            for (StringTermsBucket bucket : buckets) {
-                String value = bucket.key().stringValue();
-                mergeList.add(value);
-            }
             Aggregate rightAgg = response.aggregations().get("rightAgg");
             Aggregate rightNestedAgg = rightAgg.nested().aggregations().get("rightNestedAgg");
             List<StringTermsBucket> bucketList = rightNestedAgg.sterms().buckets().array();
-            if (!CollectionUtils.isEmpty(bucketList)) {
+            if (buckets.size() >= bucketList.size()) {
+                for (StringTermsBucket bucket : buckets) {
+                    String value = bucket.key().stringValue();
+                    mergeList.add(value);
+                }
                 for (StringTermsBucket bucket : bucketList) {
                     String value = bucket.key().stringValue();
                     mergeList.add(value);
                 }
+            } else {
+                for (StringTermsBucket bucket : bucketList) {
+                    String value = bucket.key().stringValue();
+                    mergeList.add(value);
+                }
+                for (StringTermsBucket bucket : buckets) {
+                    String value = bucket.key().stringValue();
+                    mergeList.add(value);
+                }
             }
         } else {
             Aggregate inventorAgg = response.aggregations().get("Agg");
@@ -727,6 +745,18 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
                     put("rightNestedAgg", termAgg1);
                 }}).build();
         builder.aggregations("rightAgg", aggregation1);
+
+//        //对聚合结果统计出总数
+        Aggregation terms1 = AggregationBuilders.terms(i -> i.field("merge_right_holder.name.raw").size(100000));
+        BucketsPath bucketsPath1 = BucketsPath.of(i -> i.single("terms1>_count"));
+        Aggregation statsBucket1 = AggregationBuilders.statsBucket(i -> i.bucketsPath(bucketsPath1));
+        Aggregation totalAgg1 = new Aggregation.Builder().nested(new NestedAggregation.Builder().
+                path("merge_right_holder").build())
+                .aggregations(new HashMap() {{
+                    put("terms1", terms1);
+                    put("statsBucket1", statsBucket1);
+                }}).build();
+        builder.aggregations("totalAgg1", totalAgg1);
     }
 
     public void loadInventorAgg(SearchRequest.Builder builder, Integer pageNum, Integer pageSize) {

+ 9 - 5
src/main/java/cn/cslg/pas/service/business/es/EsCountService.java

@@ -432,6 +432,7 @@ public class EsCountService {
             }
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -443,7 +444,7 @@ public class EsCountService {
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         } else {
             List<StringTermsBucket> list = agg.sterms().buckets().array();
             for (StringTermsBucket bucket : list) {
@@ -469,6 +470,7 @@ public class EsCountService {
 
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -480,7 +482,7 @@ public class EsCountService {
                 countDTO.setNumber(count + otherNum);
                 detailDTOS.add(countDTO);
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         }
 
 
@@ -1019,6 +1021,7 @@ public class EsCountService {
             }
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -1030,7 +1033,7 @@ public class EsCountService {
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         } else {
             List<StringTermsBucket> list = termsAgg.sterms().buckets().array();
             for (StringTermsBucket bucket : list) {
@@ -1056,6 +1059,7 @@ public class EsCountService {
 
             if (countDetailDTOS.size() > topN) {
                 countDetailDTOS.remove(countDetailDTOS.size() - 1);
+                otherNum += 1;
             }
 
             EsCountDetailDTO countDTO = new EsCountDetailDTO();
@@ -1063,11 +1067,11 @@ public class EsCountService {
             countDTO.setName("其他");
             countDTO.setTopN(topN);
             Long count = termsAgg.sterms().sumOtherDocCount();
-            if (count > 0) {
+            if (count != null && count > 0) {
                 countDTO.setNumber(count + otherNum);
                 countDetailDTOS.add(countDTO);
             }
-            esCountDTO.setRemainingNum(count);
+            esCountDTO.setRemainingNum(count + otherNum);
         }