|  | @ -1,185 +0,0 @@
 | 
	
		
			
				|  |  | package com.yihu.base.es.config.elasticsearch;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequestBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.get.GetRequest;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.get.GetResponse;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.index.IndexResponse;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.search.SearchRequestBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.search.SearchResponse;
 | 
	
		
			
				|  |  | import org.elasticsearch.action.search.SearchType;
 | 
	
		
			
				|  |  | import org.elasticsearch.client.transport.TransportClient;
 | 
	
		
			
				|  |  | import org.elasticsearch.common.xcontent.XContentBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.index.engine.DocumentMissingException;
 | 
	
		
			
				|  |  | import org.elasticsearch.index.query.QueryBuilder;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.SearchHit;
 | 
	
		
			
				|  |  | import org.elasticsearch.search.SearchHits;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 | 
	
		
			
				|  |  | import org.springframework.context.annotation.Scope;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Repository;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.util.ArrayList;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.Map;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * Client - Es搜索服务
 | 
	
		
			
				|  |  |  * Created by progr1mmer on 2017/12/1.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Repository
 | 
	
		
			
				|  |  | @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
 | 
	
		
			
				|  |  | public class ElasticSearchClient {
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private ElasticSearchPool elasticSearchPool;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void mapping(String index, String type, XContentBuilder xContentBuilder) {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             CreateIndexRequestBuilder createIndexRequestBuilder = transportClient.admin().indices().prepareCreate(index);
 | 
	
		
			
				|  |  |             createIndexRequestBuilder.addMapping(type, xContentBuilder);
 | 
	
		
			
				|  |  |             createIndexRequestBuilder.get();
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void remove(String index) {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             DeleteIndexRequestBuilder deleteIndexRequestBuilder = transportClient.admin().indices().prepareDelete(index);
 | 
	
		
			
				|  |  |             deleteIndexRequestBuilder.get();
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public Map<String, Object> index(String index, String type, Map<String, Object> source) {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             IndexResponse response = transportClient.prepareIndex(index, type).setSource(source).get();
 | 
	
		
			
				|  |  |             source.put("_id", response.getId());
 | 
	
		
			
				|  |  |             return source;
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void delete(String index, String type, String [] idArr) {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             for (String id : idArr) {
 | 
	
		
			
				|  |  |                 transportClient.prepareDelete(index, type, id).get();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public Map<String, Object> update(String index, String type, String id, Map<String, Object> source) throws DocumentMissingException {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             transportClient.prepareUpdate(index, type, id).setDoc(source).get();
 | 
	
		
			
				|  |  |             return findById(index, type, id);
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public Map<String, Object> findById(String index, String type, String id) {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             GetRequest getRequest = new GetRequest(index, type, id);
 | 
	
		
			
				|  |  |             GetResponse response = transportClient.get(getRequest).actionGet();
 | 
	
		
			
				|  |  |             Map<String, Object> source = response.getSource();
 | 
	
		
			
				|  |  |             if(source != null) {
 | 
	
		
			
				|  |  |                 source.put("_id", response.getId());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             return source;
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> findByField(String index, String type, QueryBuilder queryBuilder) {
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SearchRequestBuilder builder = transportClient.prepareSearch(index);
 | 
	
		
			
				|  |  |             builder.setTypes(type);
 | 
	
		
			
				|  |  |             builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |             builder.setQuery(queryBuilder);
 | 
	
		
			
				|  |  |             builder.setExplain(true);
 | 
	
		
			
				|  |  |             SearchResponse response = builder.get();
 | 
	
		
			
				|  |  |             SearchHits hits = response.getHits();
 | 
	
		
			
				|  |  |             List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
 | 
	
		
			
				|  |  |             for (SearchHit hit : hits.getHits()) {
 | 
	
		
			
				|  |  |                 Map<String, Object> source = hit.getSource();
 | 
	
		
			
				|  |  |                 source.put("_id", hit.getId());
 | 
	
		
			
				|  |  |                 resultList.add(source);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             return resultList;
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> page(String index, String type, QueryBuilder queryBuilder, int page, int size){
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SearchRequestBuilder builder = transportClient.prepareSearch(index);
 | 
	
		
			
				|  |  |             builder.setTypes(type);
 | 
	
		
			
				|  |  |             builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |             builder.setQuery(queryBuilder);
 | 
	
		
			
				|  |  |             builder.setFrom((page - 1) * size).setSize(size);
 | 
	
		
			
				|  |  |             builder.setExplain(true);
 | 
	
		
			
				|  |  |             SearchResponse response = builder.get();
 | 
	
		
			
				|  |  |             SearchHits hits = response.getHits();
 | 
	
		
			
				|  |  |             List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
 | 
	
		
			
				|  |  |             for (SearchHit hit : hits.getHits()) {
 | 
	
		
			
				|  |  |                 Map<String, Object> source = hit.getSource();
 | 
	
		
			
				|  |  |                 source.put("_id", hit.getId());
 | 
	
		
			
				|  |  |                 resultList.add(source);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             return resultList;
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public List<String> getIds(String index, String type, QueryBuilder queryBuilder){
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SearchRequestBuilder builder = transportClient.prepareSearch(index);
 | 
	
		
			
				|  |  |             builder.setTypes(type);
 | 
	
		
			
				|  |  |             builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |             builder.setQuery(queryBuilder);
 | 
	
		
			
				|  |  |             builder.setFrom(0).setSize(10000);
 | 
	
		
			
				|  |  |             builder.setExplain(true);
 | 
	
		
			
				|  |  |             SearchResponse response = builder.get();
 | 
	
		
			
				|  |  |             SearchHits hits = response.getHits();
 | 
	
		
			
				|  |  |             List<String> resultList = new ArrayList<>();
 | 
	
		
			
				|  |  |             for (SearchHit hit : hits.getHits()) {
 | 
	
		
			
				|  |  |                 resultList.add(hit.getId());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             return resultList;
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public long count(String index, String type, QueryBuilder queryBuilder){
 | 
	
		
			
				|  |  |         TransportClient transportClient = elasticSearchPool.getClient();
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SearchRequestBuilder builder = transportClient.prepareSearch(index);
 | 
	
		
			
				|  |  |             builder.setTypes(type);
 | 
	
		
			
				|  |  |             builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
 | 
	
		
			
				|  |  |             builder.setQuery(queryBuilder);
 | 
	
		
			
				|  |  |             builder.setExplain(true);
 | 
	
		
			
				|  |  |             return builder.get().getHits().totalHits();
 | 
	
		
			
				|  |  |         }finally {
 | 
	
		
			
				|  |  |             elasticSearchPool.releaseClient(transportClient);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |