elasticsearch(六)调用TransportClient查询结果处理

SearchResponse 是查询结果对象,此处是我用哪个到的列表查询处理公共处理工具类,能使用分页对象 和查询所有对象疯长成对应的List集合。

工具类中使用gson进行查询结果和泛型的对象实现bean属性值的copy操作。

import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import com.github.miemiedev.mybatis.paginator.domain.Paginator;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: Es 查询公用方法类
 * @Date:Created in 2018/11/12 0012
 */
public class EsUtil<E> {

	private Logger logger = LoggerFactory.getLogger(this.getClass());

	private Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

	/**
	 * 设置ES分页查询
	 *
	 * @param pageBounds    分页对象
	 * @param sourceBuilder 查询条件
	 */
	public static void setPageByPageBounds(PageBounds pageBounds, SearchSourceBuilder sourceBuilder) {
		int begin = (pageBounds.getPage() - 1) * pageBounds.getLimit();
		int end = begin + pageBounds.getLimit();
		//设置from确定结果索引的选项以开始搜索。默认为0。
		sourceBuilder.from(begin);
		//设置size确定要返回的搜索命中数的选项。默认为10。
		sourceBuilder.size(end);
	}


	/**
	 * 返回分页对象
	 *
	 * @param pageBounds 分页对象
	 * @param response   Es 查询结果
	 * @param clazz      clazz对象
	 * @return page list
	 */
	public PageList<E> getPageList(PageBounds pageBounds, SearchResponse response, Class<E> clazz) {
		logger.debug("es 查询结果:{}", response.toString());
		List<E> list = new ArrayList<>();
		SearchHit[] hits = response.getHits().getHits();
		for (SearchHit hit : hits) {
			E e = gson.fromJson(gson.toJson(hit.getSource()), clazz);
			list.add(e);
		}
		Paginator paginator = new Paginator(pageBounds.getPage(), pageBounds.getLimit(), (int) response.getHits().getTotalHits());
		return new PageList<>(list, paginator);
	}

	/**
	 * @Description: 返回查询列表
	 * @param response
	 * @param clazz
	 * @return List<E>
	 * @throws
	 */
	public List<E> getList(SearchResponse response, Class<E> clazz) {
		logger.debug("es 查询结果:{}", response.toString());
		List<E> list = new ArrayList<>();
		SearchHit[] hits = response.getHits().getHits();
		for (SearchHit hit : hits) {
			E e = gson.fromJson(gson.toJson(hit.getSource()), clazz);
			list.add(e);
		}
		return list;
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值