chenyi před 1 rokem
rodič
revize
5df58fb1fd

+ 28 - 7
src/main/java/cn/cslg/pas/service/business/MergePersonService.java

@@ -506,9 +506,12 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
         SearchRequest.Builder builder = new SearchRequest.Builder();
         //设置查询索引
         builder.index("patent");
+        String operate = "";
         if (StringUtils.isNotEmpty(condition)) {
             //1. 解析检索条件
             treeNode tree = expressManager.getInstance().Parse(condition, false);
+            operateNode operateNode = (operateNode) tree;
+            operate = operateNode.getoperate().getShowName();
             //3. 从es中检索数据
             Query q = formatQueryService.EsQueryToQuery((operateNode) tree, "patent", projectId);
             builder.query(q);
@@ -658,15 +661,33 @@ public class MergePersonService extends ServiceImpl<MergePersonMapper, MergePers
 
         List<String> mergeList = new ArrayList<>();
         if (StringUtils.isNotEmpty(condition)) {
-            List<String> expresses = getConditionExpress(condition);
             Aggregate terms = totalAgg.nested().aggregations().get("terms");
             List<StringTermsBucket> termsBucketList = terms.sterms().buckets().array();
-            List<String> merges = termsBucketList.stream().map(StringTermsBucket::key).map(FieldValue::stringValue)
-                    .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());
-            mergeList.addAll(merges);
+            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)))
+                            .collect(Collectors.toList());
+                    total = total > merges.size() ? merges.size() : total;
+                    merges = merges.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
+                    if (CollectionUtils.isEmpty(mergeList)) {
+                        mergeList.addAll(merges);
+                    } else {
+                        merges.retainAll(mergeList);
+                        mergeList = new ArrayList<>(merges);
+                    }
+                }
+            } else {
+                List<String> expresses = getConditionExpress(condition);
+                List<String> merges = termsBucketList.stream().map(StringTermsBucket::key).map(FieldValue::stringValue)
+                        .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());
+                mergeList.addAll(merges);
+            }
         } else {
             if (type == 0) {
                 Aggregate agg = response.aggregations().get("Agg");