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;
}
}