查询条件
- 多条件或的关系
- 高亮关键字
- 分页查询
查询客户端ElasticsearchRestTemplate
@Override
public List<JobOrder> findByJobOrderTitleOrJobOrderContent(String text, Integer page, Integer size) {
Assert.isTrue(page != null,"当前页数不能必传");
Assert.isTrue(size != null,"每页显示条数必传");
org.springframework.data.domain.PageRequest pageRequest = org.springframework.data.domain.PageRequest.of(page-1, size);
//构建查询条件
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.should(QueryBuilders.matchQuery("jobOrderTitle", text));
boolQuery.should(QueryBuilders.matchQuery("jobOrderContent", text));
//构建高亮字段
HighlightBuilder.Field field1 = new HighlightBuilder.Field("jobOrderTitle")
.preTags("<font color='red'>")
.postTags("</font>");
HighlightBuilder.Field field2 = new HighlightBuilder.Field("jobOrderContent")
.preTags("<font color='red'>")
.postTags("</font>");
HighlightBuilder.Field[] fields = {field1,field2};
// 构建查询
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(boolQuery)
.withHighlightFields(fields)
.withPageable(pageRequest)
.build();
//执行查询
SearchHits<JobOrder> searchHits = elasticsearchRestTemplate.search(searchQuery, JobOrder.class);
List<JobOrder> jobOrders = new ArrayList<>();
for (SearchHit<JobOrder> searchHit : searchHits.getSearchHits()) {
JobOrder content = searchHit.getContent();
//获取高亮信息,把高亮字段复制到对象上
Map<String, List<String>> highlightFields = searchHit.getHighlightFields();
List<String> jobOrderTitle = highlightFields.get("jobOrderTitle");
if(jobOrderTitle!=null){
content.setJobOrderTitle(jobOrderTitle.get(0));
}
List<String> jobOrderContent = highlightFields.get("jobOrderContent");
if (jobOrderContent != null) {
content.setJobOrderContent(jobOrderContent.get(0));
}
jobOrders.add(content);
}
return jobOrders;
}