level 8
boot是2.5x的版本,返回的searchhit没有很多博客上写的getsourceasmap的方法
2021年11月09日 06点11分
2
level 8
而且返回高亮属性方法里也没有HighlightField类了,替换成了字符串列表了
2021年11月09日 06点11分
3
level 13
public List<Map<String,Object>> searchPageHighlight(String keyword,int pageNo,int size) throws IOException {
if (pageNo<=1){
pageNo = 1;
}
if (size<=1){
size = 10;
}
SearchRequest request = new SearchRequest(indexName);
TermQueryBuilder matchQueryBuilder = QueryBuilders.termQuery("title", keyword);
//高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("title").preTags("<span style='color:red'>").postTags("</span>");
// highlightBuilder.requireFieldMatch(false); // 关闭多个高亮显示
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(matchQueryBuilder)
.timeout(TimeValue.timeValueSeconds(3))
.from(pageNo)
.size(size)
.highlighter(highlightBuilder);
//执行搜索
request.source(searchSourceBuilder);
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
//分析结果
List<Map<String,Object>> list = new ArrayList<>();
for (SearchHit hit : response.getHits()) {
// 解析高亮字段
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
HighlightField title = highlightFields.get("title");
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
if (title != null){
// 将原来的字段 换位新的高亮字段
Text[] fragments = title.getFragments();
String newTitle = "";
for (Text fragment : fragments) {
newTitle+=fragment;
}
sourceAsMap.put("title",newTitle); // 替换原先的字段
}
list.add(sourceAsMap);
}
return list;
}
2021年11月09日 08点11分
7
谢谢老哥提供的代码,但是这个好像不是springdata整合的
2021年11月09日 08点11分