| 
					
				 | 
			
			
				@@ -0,0 +1,485 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+package com.ruoyi.framework.config; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import cn.hutool.core.util.StrUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.ruoyi.framework.config.properties.ElasticSearchConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.http.HttpHost; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.ActionListener; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.DocWriteRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.bulk.BulkRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.bulk.BulkResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.delete.DeleteRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.delete.DeleteResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.get.GetRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.get.GetResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.index.IndexRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.index.IndexResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.search.SearchRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.search.SearchResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.support.WriteRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.support.master.AcknowledgedResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.update.UpdateRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.action.update.UpdateResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.client.RequestOptions; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.client.RestClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.client.RestHighLevelClient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.client.indices.CreateIndexRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.client.indices.CreateIndexResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.client.indices.GetIndexRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.common.Strings; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.common.settings.Settings; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.common.unit.DistanceUnit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.common.xcontent.XContentBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.common.xcontent.XContentFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.common.xcontent.XContentType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.core.TimeValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.index.query.BoolQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.index.query.GeoDistanceQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.index.query.MultiMatchQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.index.query.QueryBuilders; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.search.SearchHit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.search.SearchHits; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.search.builder.SearchSourceBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.search.fetch.subphase.FetchSourceContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.search.sort.FieldSortBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.elasticsearch.search.sort.SortOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.context.annotation.Bean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import javax.annotation.PostConstruct; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.concurrent.TimeUnit; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * ES客户端 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+@Slf4j 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public class ElasticSearchClient { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ElasticSearchConfig elasticSearchConfig; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static RestHighLevelClient client; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 设置创建索引的相关参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @PostConstruct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (client != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                client.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //创建 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            HttpHost httpHost = new HttpHost(elasticSearchConfig.getIp(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    elasticSearchConfig.getPort(), elasticSearchConfig.getType()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            client = new RestHighLevelClient(RestClient.builder(httpHost)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 如果注释以下代码,默认访问127.0.0.1:9200 或者添加下面代码,访问的是yml文件配置的IP,端口,类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Bean 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public RestHighLevelClient client() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return new RestHighLevelClient(RestClient.builder(new HttpHost(elasticSearchConfig.getIp(), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                elasticSearchConfig.getPort(), elasticSearchConfig.getType()))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 创建索引 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean createIndex(String index) throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (isIndexExist(index)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("Index is  exits!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //1.创建索引请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CreateIndexRequest request = new CreateIndexRequest(index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //2.执行客户端请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        CreateIndexResponse response = client.indices() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .create(request, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return response.isAcknowledged(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 删除索引 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean deleteIndex(String index) throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!isIndexExist(index)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("Index is not exits!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DeleteIndexRequest request = new DeleteIndexRequest(index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        AcknowledgedResponse delete = client.indices() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                .delete(request, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return delete.isAcknowledged(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 新增单条文档数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param indexName 索引名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void createDocument(String indexName, String id, Map<String, Object> paramMap) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 指定单条文档数据,最终会转化成Json格式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        XContentBuilder builder = XContentFactory.jsonBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        builder.startObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!CollectionUtils.isEmpty(paramMap)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                paramMap.forEach((key, value) -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        builder.field(key, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } catch (IOException ignored) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        builder.endObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 创建新增文档数据的请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IndexRequest indexRequest = new IndexRequest(indexName).id(id).source(builder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 手动指定路由的key,文档查询时可提高性能 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        indexRequest.routing("route_" + indexName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 等待主分片保存的超时时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        indexRequest.timeout(TimeValue.timeValueSeconds(elasticSearchConfig.getMasterShardTimeOut())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 刷新策略,WAIT_UNTIL设置则表示刷新使此请求的内容对搜索可见为止 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        indexRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 操作类型为新增 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        indexRequest.opType(DocWriteRequest.OpType.CREATE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 异步执行新增文档数据请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        client.indexAsync(indexRequest, RequestOptions.DEFAULT, new ActionListener<IndexResponse>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public void onResponse(IndexResponse indexResponse) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("新增单条文档数据,结果:{}", indexResponse.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public void onFailure(Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 更新文档内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param indexName 索引名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void updateDocument(String indexName, String id, Map<String, Object> paramMap) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 创建更新文档请求并设置参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        UpdateRequest updateRequest = new UpdateRequest(indexName, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateRequest.doc(paramMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 主分片执行更新的超时时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateRequest.timeout(TimeValue.timeValueSeconds(elasticSearchConfig.getMasterShardTimeOut())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 刷新策略 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 重试更新操作多少次 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        updateRequest.retryOnConflict(3); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 异步执行更新文档的请求 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        client.updateAsync(updateRequest, RequestOptions.DEFAULT, new ActionListener<UpdateResponse>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public void onResponse(UpdateResponse updateResponse) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("更新文档内容,结果:{}", updateResponse.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public void onFailure(Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 删除文档数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param indexName 索引名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void deleteDocument(String indexName, String id) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        DeleteRequest deleteRequest = new DeleteRequest(indexName, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 主分片执行删除的超时时长 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        deleteRequest.timeout(TimeValue.timeValueMinutes(2)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 刷新策略 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        deleteRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 异步执行删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        client.deleteAsync(deleteRequest, RequestOptions.DEFAULT, new ActionListener<DeleteResponse>() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public void onResponse(DeleteResponse deleteResponse) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("删除成功:" + deleteResponse.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            public void onFailure(Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("删除失败:" + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 文档数据批量插入 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param mapList   行数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param indexName 索引 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param idName    主键名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void importDocument(List<Map<String, Object>> mapList, String indexName, String idName) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        IndexRequest indexRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BulkRequest bulkRequest = new BulkRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (Map<String, Object> mp : mapList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                indexRequest = new IndexRequest(indexName).id(mp.get(idName).toString()).source(mp); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                bulkRequest.add(indexRequest); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("批量插入结果:{}", bulkResponse.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception ex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ex.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 根据经纬度查询范围查找location 经纬度字段,distance 距离中心范围KM,lat  lon 圆心经纬度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param longitude 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param latitude 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param distance 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<Map<String, Object>> geoDistanceQuery(String index, Float longitude, Float latitude, String distance) throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (longitude == null || latitude == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //拼接条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        QueryBuilder isdeleteBuilder = QueryBuilders.termQuery("isdelete", false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 以某点为中心,搜索指定范围 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GeoDistanceQueryBuilder distanceQueryBuilder = new GeoDistanceQueryBuilder("location"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        distanceQueryBuilder.point(latitude, longitude); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //查询单位:km 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        distanceQueryBuilder.distance(distance, DistanceUnit.KILOMETERS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        boolQueryBuilder.filter(distanceQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//        boolQueryBuilder.must(isdeleteBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        searchSourceBuilder.query(boolQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SearchRequest searchRequest = new SearchRequest(index); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        searchRequest.source(searchSourceBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 返回结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SearchHits searchHitArray = searchResponse.getHits(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Map<String, Object>> mapList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (SearchHit searchHit : searchHitArray.getHits()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Map<String, Object> sourceAsMap = searchHit.getSourceAsMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mapList.add(sourceAsMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return mapList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 通过id查询数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param indexName 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param fields    需要显示的字段,逗号分隔(缺省为全部字段) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public Map<String, Object> getDocById(String indexName, String id, String fields) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Map<String, Object> getDocByIdMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GetRequest getRequest = new GetRequest(indexName, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (StrUtil.isNotBlank(fields)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //只查询特定字段。如果需要查询所有字段则不设置该项。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getRequest.fetchSourceContext(new FetchSourceContext(true, fields.split(","), Strings.EMPTY_ARRAY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GetResponse getResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getResponse = client.get(getRequest, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (getResponse.isExists()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getDocByIdMap.put("msg", "操作成功!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getDocByIdMap.put("data", getResponse.getSource()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getDocByIdMap.put("code", 200); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getDocByIdMap.put("msg", "数据不存在"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getDocByIdMap.put("code", -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getDocByIdMap.put("data", null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return getDocByIdMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 检索、分页 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param indexName    索引名称 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param mpParams     查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param from         起始页 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param size         每页数量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param fields       返回列 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param preciseQuery 1:精确查询 2:模糊查询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public List<Map<String, Object>> searchDocument(String indexName, Map<String, Object> mpParams, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                                    int from, int size, String fields, String sorts, Integer preciseQuery) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SearchRequest searchRequest = new SearchRequest(indexName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 大多数搜索参数添加到searchSourceBuilder 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<Map<String, Object>> mapList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 组合字段查询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            BoolQueryBuilder boolQueryBuilder = this.getBoolQueryBuilder(mpParams, preciseQuery); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            searchSourceBuilder.query(boolQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 自定义返回列 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StrUtil.isNotBlank(fields)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                searchSourceBuilder.fetchSource(new FetchSourceContext(true, fields.split(","), Strings.EMPTY_ARRAY)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (StrUtil.isNotBlank(sorts)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                searchSourceBuilder.sort(sorts + ".keyword", SortOrder.DESC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 分页 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            searchSourceBuilder.from(from); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            searchSourceBuilder.size(size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 允许搜索的超时时长,10s 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            searchSourceBuilder.timeout(new TimeValue(elasticSearchConfig.getSearchTimeOut(), TimeUnit.SECONDS)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            searchRequest.source(searchSourceBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            // 返回结果 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SearchHits searchHitArray = searchResponse.getHits(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (SearchHit searchHit : searchHitArray.getHits()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Map<String, Object> sourceAsMap = searchHit.getSourceAsMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mapList.add(sourceAsMap); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return mapList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 组合字段查询条件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param mpParams 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param preciseQuery 1:精确查询 2:模糊查询 3.匹配多个字段的模糊查询(使用IK中文分词器) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public BoolQueryBuilder getBoolQueryBuilder(Map<String, Object> mpParams, Integer preciseQuery) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (null != mpParams.get("search") && null != mpParams.get("fields")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (mpParams.get("fields") instanceof List) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String[] fields = (String[]) ((List) mpParams.get("fields")). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            toArray(new String[((List) mpParams.get("fields")).size()]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(mpParams.get("search"), fields); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    boolQueryBuilder = boolQueryBuilder.must(multiMatchQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            if (mpParams != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                if (preciseQuery != null && preciseQuery == 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    for (Map.Entry<String, Object> entry : mpParams.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        // 精确匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery(entry.getKey() + ".keyword", entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                        boolQueryBuilder = boolQueryBuilder.must(termQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } else if (preciseQuery != null && preciseQuery == 2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                for (Map.Entry<String, Object> entry : mpParams.entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    // 模糊匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(entry.getKey(), entry.getValue()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    boolQueryBuilder = boolQueryBuilder.must(matchQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } else if (preciseQuery != null && preciseQuery == 3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                //多词模糊匹配 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+////                List<Object> values = ((MultiValueMap) mpParams).get("fields"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//               /* for (String value : values) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    log.info(key + ": " + value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                ((MultiValueMap) mpParams).entrySet().forEach(entry -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("新品", entry.).minimumShouldMatch("50%"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                    boolQueryBuilder = boolQueryBuilder.must(multiMatchQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//                }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+//            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return boolQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 索引创建前,判断索引是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public static Boolean isIndexExist(String checkIndex) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Boolean flag = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            GetIndexRequest getIndexRequest = new GetIndexRequest(checkIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getIndexRequest.local(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getIndexRequest.humanReadable(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getIndexRequest.includeDefaults(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            flag = client.indices().exists(getIndexRequest, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return flag; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 通过ID判断文档是否存在 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param index 索引,类似数据库 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param id    数据ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean existsById(String index, String id) throws IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        GetRequest request = new GetRequest(index, id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        //不获取返回的_source的上下文 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        request.fetchSourceContext(new FetchSourceContext(false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        request.storedFields("_none_"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return client.exists(request, RequestOptions.DEFAULT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |