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