java中使用elasticsearch实现高亮查询其实很简单
添加高亮查询
最后有完整代码奥 红色框的地方不能少
核心思想,就是把原来的字段用高亮字段去替换
接下来就是把高亮字段替换掉原来map的字段 直接上完整代码
//2、从索引库获取数据实现搜索功能
public ResponseResult search(String keywords,int pageNo,int pageSize) throws IOException {
if (pageNo<=1){
pageNo=1;
}
//条件搜索
SearchRequest goods = new SearchRequest("ceshi");
SearchSourceBuilder builder = new SearchSourceBuilder();
//分页
builder.from(pageNo);
builder.size(pageSize);
TermQueryBuilder title = QueryBuilders.termQuery("content", keywords);
builder.query(title);
builder.timeout(new TimeValue(60, TimeUnit.SECONDS));
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("content");//高亮的字段
highlightBuilder.requireFieldMatch(false);//是否多个字段都高亮
highlightBuilder.preTags("<span style=color:red>");//前缀后缀
highlightBuilder.postTags("</span>");
builder.highlighter(highlightBuilder);
//执行搜索
goods.source(builder);
SearchResponse search = client.search(goods, RequestOptions.DEFAULT);
//解析结果
ArrayList<Map<String,Object>> list = new ArrayList<>();
for (SearchHit hit : search.getHits().getHits()) {
//解析高亮的字段
//获取高亮字段
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
System.out.println("=========="+highlightFields);
HighlightField content = highlightFields.get("content");
System.out.println("==content=="+content);
Map<String, Object> sourceAsMap = hit.getSourceAsMap();//原来的结果
//将原来的字段替换为高亮字段即可
if (content!=null){
Text[] fragments = content.fragments();
String newTitle = "";
for (Text text : fragments) {
newTitle +=text;
}
sourceAsMap.put("content",newTitle);//替换掉原来的内容
}
list.add(sourceAsMap);
}
return ResponseResult.success("搜索成功").setData(list);
}
