最近有个项目使用到了es,需要用es来实现检索功能;之前我也是0经验一点都没接触,甚至都看不懂那些查询的方法,后来也是照猫画虎总算是实现了些想要的功能,下面就记录一下es基本常用的查询;如果有问题还请多指点。
基本查询:
这个查询可通过单个条件和多个条件查询,参数是有实体来接收,页面传递可以自定封装也可以用from表单方式。这里就不细说了。
统一使用的返回结果是Result
@Getter
@Setter
public class Result implements Serializable {
private Integer code; //状态码
private String count; //查询总条数
private List<Map<String, Object>> filter; //接收对象
private Map<String, ?> data; //存放pageContent
private Integer pageNumber; //当前页码
private Integer pageSize; //每页展示条数
private HashMap<String,List<GroupInfo>> groupFilter; //存放聚合数据
}
页面直接请求后台到该接口,参数是实体接收。
/**
* person查询
* 继承baseService的list返回的query对象
*
* @return
*/
public Result personList(PersonInfo personInfo) {
Result result = new Result();
//如果参数有值,放这个map中
Map<String, Object> queryParams = new HashMap<>();
//接收参数,如果没有则按没条件查询,下方有判空
String query_EQ_personName = personInfo.getPersonName();
String query_EQ_workOrgId = personInfo.getWorkOrgId()+"";
String query_EQ_filed = personInfo.getFiled();
if( StringUtils.isNotEmpty(query_EQ_personName) ){
queryParams.put("EQ_person_name", query_EQ_personName);
}
if( StringUtils.isNotEmpty(query_EQ_workOrgId) && !"null".equals(query_EQ_workOrgId)){
queryParams.put("EQ_work_org_id", Integer.parseInt(query_EQ_workOrgId));
}
if( StringUtils.isNotEmpty(query_EQ_filed) ){
queryParams.put("EQ_filed", query_EQ_filed);
}
QueryBuilder queryBuilder = createQueryBuilder(create(queryParams));
//PageRequest.of(personInfo.getPageNumber(), personInfo.getPageSize(), Sort.by(Sort.Direction.DESC, "person_name.keyword"))
//personInfo.getPageNumber() 分页的起始页,
//personInfo.getPageSize() 分页的size,
//Sort.by(Sort.Direction.DESC, 排序
//person_name.keyword" 排序的字段
Page<PersonInfoEs> page = personRepository.search(queryBuilder, PageRequest.of(personInfo.getPageNumber(), personInfo.getPageSize(), Sort.by(Sort.Direction.DESC, "person_name.keyword")));
result.setCode(200);
Map<String, Object> contentMap = new HashMap<>();
contentMap.put("content", page.getContent());
result.setData(contentMap);
result.setCount(String.valueOf(page.getTotalElements()));
result.setPageSize(page.getSize());
result.setPageNumber(page.getNumber());
return result;
}
其实也没什么特别大的难度,总体来说还是比较简单吧,还有其他的查询方式包括聚合,请看我博客其他文章。如有问题请留言探讨。