Переглянути джерело

fixed es排除数据搜索非必要数据

18339543638 4 роки тому
батько
коміт
d93d1b0f21

+ 18 - 0
jetlinks-components/elasticsearch-component/src/main/java/org/jetlinks/community/elastic/search/utils/QueryParamTranslator.java

@@ -1,7 +1,9 @@
 package org.jetlinks.community.elastic.search.utils;
 
+import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 import org.elasticsearch.index.query.BoolQueryBuilder;
+import org.elasticsearch.index.query.ExistsQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.builder.SearchSourceBuilder;
@@ -15,7 +17,10 @@ import org.jetlinks.core.metadata.DataType;
 import org.jetlinks.core.metadata.PropertyMetadata;
 import org.springframework.util.StringUtils;
 
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.BiConsumer;
 import java.util.function.Consumer;
@@ -56,6 +61,19 @@ public class QueryParamTranslator {
         for (Term term : queryParam.getTerms()) {
             linkTypeParser.process(term, paramConverter, queryBuilders);
         }
+
+        //字段是否存在
+        Set<String> includes = queryParam.getIncludes();
+        List<QueryBuilder> must = queryBuilders.must();
+        if (includes!=null&&includes.size()!=0) {
+            BoolQueryBuilder shouldBuilders = QueryBuilders.boolQuery();
+            for (String fieldName : includes) {
+                ExistsQueryBuilder existsQueryBuilder = QueryBuilders.existsQuery(fieldName);
+                must.add(existsQueryBuilder);
+                shouldBuilders.should(existsQueryBuilder);
+            }
+            must.add(shouldBuilders);
+        }
         return queryBuilders;
     }
     public static SearchSourceBuilder convertSearchSourceBuilder(QueryParam queryParam, ElasticSearchIndexMetadata metadata) {