一、前言
在实际使用中搜索结果中的关键词前端通常会以特殊形式展示,比如标记为红色使人一目了然。我们可以通过 ES 提供的高亮功能实现此效果。
二、代码实现
前文查询是通过一个继承 ElasticsearchRepository 的接口实现的,但是如果要实现高亮,这种方式就满足不了了,这里我们需要通过 ElasticsearchTemplate 来完成。
注入 ElasticsearchTemplate
① ElasticsearchTemplate 类简介
public class ElasticsearchTemplate implementsElasticsearchOperations, ApplicationContextAware {
...省略其余部分...
}
从上述源码中可以看到 ElasticsearchTemplate 实现了 ApplicationContextAware 接口,表明这个类是被 Spring 管理的,可以直接注入使用。
② 业务实现类注入 ElasticsearchTemplate
@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;
查询对象指定高亮字段
在构建查询对象时需要指定高亮字段,通过 withHighlightFields 方法设置。
privateSearchQuery getKnowledgeSearchQuery(KnowledgeSearchParam param) {
Pageable pageable= PageRequest.of(param.getStart() /param.getSize(), param.getSize());
String knowledgeTitleFieldName= "knowledgeTitle";
String knowledgeContentFieldName= "knowledgeContent";
String preTags= "";
String postTags= "";
HighlightBuilder.Field knowledgeTitleField= newHighlightBuilder.Field(knowledgeTitleFieldName).preTags(pr