es搜索,封装工具类

elasticsearchs搜索 工具类
增删改查

package com.mr.utils;

import java.lang.reflect.Field;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.elasticsearch.action.delete.DeleteResponse;
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.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.springframework.util.StringUtils;

public class EsUtil {

    public final static String HOST = "127.0.0.1";
    
    public final static int PORT = 9300; //http请求的端口是9200,客户端是9300
    
    private static TransportClient client = null;
    
    
    /**
     * 获取客户端连接信息
     * @Title: getConnect 
     * @author sunt  
     * @date 2017年11月23日
     * @return void
     * @throws UnknownHostException 
     */
    public static void getConnect(){
        try {
			client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddresses(
						new TransportAddress(InetAddress.getByName(HOST),PORT));
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    /**
     * 关闭连接
     * @Title: closeConnect 
     * @author sunt  
     * @date 2017年11月23日
     * @return void
     */
    public static void closeConnect() {
        if(null != client) {
            client.close();
        }
    }
    
    /**
   * 创建索引-传入Map对象
   * @Title: addIndex3 
   * @author sunt  
   * @date 2017年11月23日
   * @return void
   */
//  public static void addIndexToMap(String indexName,String typeName,Map map) {
//      EsUtil.getConnect();
//      IndexResponse response = client.prepareIndex(indexName, typeName).setSource(map).get();
//      EsUtil.closeConnect();
//  }
  /**
   * 转Map
   * @param obj
   * @return
   */
  public static Map<String, Object> objMap(Object obj) {
      Map<String, Object> map = new HashMap<String, Object>();
      if (obj == null) {
          return map;
      }
      Class clazz = obj.getClass();
      Field[] fields = clazz.getDeclaredFields();
      try {
          for (Field field : fields) {
              field.setAccessible(true);
              map.put(field.getName(), field.get(obj));
          }
      } catch (Exception e) {
          e.printStackTrace();
      }
      return map;
  }

    /**
     * 添加索引:传入json字符串
     * @Title: addIndex2 
     * @author sunt  
     * @date 2017年11月23日
     * @return void
     */
    public static void addIndexToJson(String indexName,String typeName,String id,String jsonStr) {
    	getConnect();
        IndexResponse response = client.prepareIndex(indexName, typeName,id).setSource(jsonStr,XContentType.JSON).get();
        closeConnect();
    }
    
    
    /**
     * 根据索引名称,类别,文档ID 删除索引库的数据
     * @Title: deleteData 
     * @author sunt  
     * @date 2017年11月23日
     * @return void
     */
    public static void deleteData(String indexName,String typeName,String id) {
    	getConnect();
        DeleteResponse deleteResponse = client.prepareDelete(indexName, typeName, id).get();
        closeConnect();
    }
    
    /**
     * 修改
     */
    public static void updateData(String indexName,String typeName,String id,Map map) {
    	getConnect();
        UpdateResponse updateResponse = client.prepareUpdate(indexName, typeName, id)
                                        .setDoc(map).get();
        closeConnect();
    }
    
    
    /**
     * 获取数据
     */
    public static Map getDataById(String indexName,String typeName,String id) {
    	getConnect();
        GetResponse getResponse = client.prepareGet(indexName, typeName, id).get();
        closeConnect();
        return getResponse.getSourceAsMap();
    }
//    public static void main(String[] args) {
//		Map map = EsUtil.getDataById("msg", "tweet", "2");
//		System.out.println(map);
//    }
    
    /**
     * 复合查询
     * @return 
     */
    public static List<Map<String, Object>> getIndexsForList(String indexName,String typeName,String highFiledName,Map<String,Object> mustMap,Integer start ,Integer end) {
    	getConnect();
    	/**    
    	 * 执行搜索(带高亮)    
         * @param indexname 索引名称    
         * @param type 索引类型     
         * @param queryBuilder 查询条件   
         * @param highFileName 高亮字段  
         * @return    
         */    
    	
    	 BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
    	 //如果传入条件 mustMap  拼接条件对象
    	 if(mustMap != null) {
    		 //循环map将key作为字段名,value作为值进行比较
    		 for(String key:mustMap.keySet()) {
    			 boolQuery.must(QueryBuilders.matchPhraseQuery(key,mustMap.get(key)));
    		 }
    	 }

             
           //范围查询
//             RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("userAge")
//                   .from(18).to(20);
//             boolQuery.filter(rangeQueryBuilder);
            
             SearchRequestBuilder builder = null;

             builder = client.prepareSearch(indexName)
                         .setTypes(typeName)
                         .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                         .setQuery(boolQuery);

             			//设置高亮  高亮变量
                     	if(!StringUtils.isEmpty(highFiledName)) {
                     		HighlightBuilder highlightBuilder = new HighlightBuilder(); 
                     		highlightBuilder.preTags("<font color='red'>");//设置前缀        
                     		highlightBuilder.postTags("</font>");//设置后缀      
                     		highlightBuilder.field(highFiledName);//设置高亮字段   
                     		builder.highlighter(highlightBuilder);
                     	}
                         
                        //设置分页
                         if(start!=null && start>-1) {
                        	 builder.setFrom(start);
                         }
			             if(end!=null && end>-1) {
			            	 builder.setFrom(end);
			             }
                         
                         
            
             SearchResponse response = builder.get();
             List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
             
             //response:结果对象  循环结果对象
             for(SearchHit hit:response.getHits()){
            	 //getSourceAsMap 获得源代码改成map
            	 Map map = hit.getSourceAsMap();
            	if(!StringUtils.isEmpty(highFiledName)) {
            		map.put(highFiledName, String.valueOf(hit.getHighlightFields().get(highFiledName).fragments()[0]));
            	}
            		list.add(map);
             }
             System.out.println(list);
             closeConnect();
             return list;
    }
    
    
	
}

第一次发,有什么的请多指教~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值