Elasticsearch教程-查询数据 | 分页查询

Elasticsearch 目录

Elasticsearch教程(一),全程直播(小白级别)
Elasticsearch教程(二),IK分词器安装
Elasticsearch教程(三),IK分词器安装 (极速版)
Elasticsearch安装(四), elasticsearch head 插件安装和使用。
Elasticsearch教程(五) elasticsearch Mapping的创建
Elasticsearch教程(六) elasticsearch Client创建
Elasticsearch教程(七) elasticsearch Insert 插入数据(Java)
Elasticsearch教程(八) elasticsearch delete 删除数据(Java)
Elasticsearch教程(九) elasticsearch 查询数据 | 分页查询
Elasticsearch权威指南-中文.pdf

Elasticsearch 的查询很灵活,并且有Filter,有分组功能,还有ScriptFilter等等,所以很强大。下面上代码:

一个简单的查询,返回一个List<对象> .。

    /**
     * 根据Id 查询 SOBangg
     * @param key
     * @return
     */
    public static List findSOBanggById(String id) {
    	Client client = ESTools.client;
    	SearchResponse response = client.prepareSearch(MappingManager.INDEX)
        .setTypes(MappingManager.B_TYPE)
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.termQuery("id",id))                 // Query
    //        .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter
        .setFrom(0).setSize(60).setExplain(true)
        .execute()
        .actionGet();
    	SearchHits hits = response.getHits();
    	List list = new ArrayList();
    	for (SearchHit searchHit : hits) {
    		Map source = searchHit.getSource();
    		SOBangg entity = (SOBangg) JSONObject.toBean(JSONObject.fromObject(source) , SOBangg.class);
    		list.add(entity);
    	}
    	return list;
    }

下面我把我整个类贴出来。


    package com.sojson.core.elasticsearch.manager;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import net.sf.json.JSONObject;
    import org.elasticsearch.action.get.GetRequest;
    import org.elasticsearch.action.get.GetResponse;
    import org.elasticsearch.action.search.SearchRequestBuilder;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.action.search.SearchType;
    import org.elasticsearch.client.Client;
    import org.elasticsearch.common.unit.TimeValue;
    import org.elasticsearch.index.query.QueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.SearchHits;
    import com.sojson.common.model.SOBang;
    import com.sojson.common.model.SOBangg;
    import com.sojson.common.model.SOBanggKey;
    import com.sojson.core.elasticsearch.utils.ESTools;
    import com.sojson.core.mybatis.page.Pagination;
    public class SelectManager {
    	
    	
    	/**
    	 * 分页查询 SOBang
    	 * @param resultMap
    	 * @param pageSize
    	 * @param pageNo
    	 * @return
    	 */
    	public static Pagination findByPage(Map resultMap, 
    			Integer pageSize,
    			Integer pageNo){
    		Pagination page = new Pagination();
    		pageNo = null==pageNo?1:pageNo;
    		page.setPageNo(pageNo);
    		page.setPageSize(pageSize);
    		
    		
    		Client client = ESTools.client;
    		SearchRequestBuilder srb = client.prepareSearch(MappingManager.INDEX);
    		srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
    		srb.setTypes(MappingManager.TYPE);
    //		srb.setQuery(resultMap);
    		srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize)
    		.setExplain(true);
    		
    		SearchResponse response = srb.execute().actionGet();
    		SearchHits hits = response.getHits();
    		
    		page.setTotalCount((int)hits.getTotalHits());
    		List list = new ArrayList();
    		for (SearchHit searchHit : hits) {
    			Map source = searchHit.getSource();
    			SOBang entity = (SOBang)JSONObject.toBean(JSONObject.fromObject(source) 
    						, SOBang.class);
    			list.add(entity);
    		}
    		page.setList(list);
    		return page;
    		
    	}
    	/**
    	 * 分页查询 SOBangg
    	 * @param resultMap
    	 * @param pageSize
    	 * @param pageNo
    	 * @return
    	 */
    	public static Pagination findSOBanggByPage(Map resultMap,
    			Integer pageSize,
    			Integer pageNo){
    		Pagination page = new Pagination();
    		pageNo = null==pageNo?1:pageNo;
    		page.setPageNo(pageNo);
    		page.setPageSize(pageSize);
    		
    		
    		Client client = ESTools.client;
    		SearchRequestBuilder srb = client.prepareSearch(MappingManager.INDEX);
    		srb.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
    		srb.setTypes(MappingManager.B_TYPE);
    		
    		srb.setQuery(QueryBuilders.termQuery("status",0));
    		srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize)
    		.setExplain(true);
    		
    		SearchResponse response = srb.execute().actionGet();
    		SearchHits hits = response.getHits();
    		
    		page.setTotalCount((int)hits.getTotalHits());
    		List list = new ArrayList();
    		for (SearchHit searchHit : hits) {
    			Map source = searchHit.getSource();
    			SOBangg entity = (SOBangg) JSONObject
    				.toBean(JSONObject.fromObject(source) , SOBangg.class);
    			list.add(entity);
    		}
    		page.setList(list);
    		return page;
    		
    	}
    	/**
    	 * 根据ID查询SOBang
    	 * @param id
    	 * @return
    	 */
    	public static SOBang findSOBangById(String id){
    		GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.TYPE, id);
    		//GetResponse response = client.prepareGet(MappingManager.INDEX, MappingManager.TYPE, id);
    		GetResponse response = ESTools.client.get(rq).actionGet();
    		SOBang entity = null;
    		//判断非空
    		if(!response.isSourceEmpty()){
    			Map data = response.getSource();
    			entity = (SOBang)JSONObject.toBean(JSONObject.fromObject(data)
    						,SOBang.class);
    		}
    		return entity;
    	}
    	/**
    	 * 根据Key 查询 SOBangg
    	 * @param key
    	 * @return
    	 */
    	public static SOBangg findSOBanggByKey(SOBanggKey key) {
    		String prefix = "%sx_x%s";
    		String id = String.format(prefix, key.getId(),key.getGid());
    		GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.B_TYPE, id);
    		//GetResponse response = client.prepareGet(MappingManager.INDEX, MappingManager.TYPE, id);
    		GetResponse response = ESTools.client.get(rq).actionGet();
    		SOBangg entity = null;
    		//判断非空
    		if(!response.isSourceEmpty()){
    			Map data = response.getSource();
    			entity = (SOBangg)JSONObject.toBean(JSONObject.fromObject(data)
    						,SOBangg.class);
    		}
    		return entity;
    	}
    	/**
    	 * 根据Id 查询 SOBangg
    	 * @param key
    	 * @return
    	 */
    	public static List findSOBanggById(String id) {
    	
    		Client client = ESTools.client;
    		SearchResponse response = client.prepareSearch(MappingManager.INDEX)
    	    .setTypes(MappingManager.B_TYPE)
    	    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    	    .setQuery(QueryBuilders.termQuery("id",id))                 // Query
    	//        .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter
    	    .setFrom(0).setSize(60).setExplain(true)
    	    .execute()
    	    .actionGet();
    		SearchHits hits = response.getHits();
    		List list = new ArrayList();
    		for (SearchHit searchHit : hits) {
    			Map source = searchHit.getSource();
    			SOBangg entity = (SOBangg) JSONObject.toBean(JSONObject.fromObject(source) 
    						, SOBangg.class);
    			list.add(entity);
    		}
    		return list;
    	}
    	
    	
    	
    	public static BangDetailsBo findById(String id) {
    		BangDetailsBo result = new BangDetailsBo();
    		GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.TYPE, id);
    		
    		GetResponse response = ESTools.client.get(rq).actionGet();
    		//判断非空
    		if(!response.isSourceEmpty()){
    			Map data = response.getSource();
    			SOBang entity = (SOBang)JSONObject.toBean(JSONObject.fromObject(data)
    						,SOBang.class);
    			result.setEntity(entity);
    		}
    		
    		return result;
    	}
    }

自己鼓捣鼓捣吧,有问题加群问我,Pagination对象我没公开,这个是系统里的,和这个查询没关系,你可以替换成你的Page对象即可。

原文地址:

https://www.sojson.com/blog/90.html

不瞒个人博客
请先登录后发表评论
  • latest comments
  • 总共0条评论