You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch7如何配置返回内嵌高亮标签的搜索结果(Spring Data ES场景)

实现方案

你要的功能Spring Data Elasticsearch已经提供了原生支持,不需要手动处理字段映射合并,以下是两种可选配置方式:

  • 全局配置方式
    直接在Spring Boot配置文件中添加配置即可全局开启高亮结果自动合并到_source字段:
    yml格式示例:
spring:
  elasticsearch:
    rest:
      highlight-source: true

properties格式示例:

spring.elasticsearch.rest.highlight-source=true

该配置适用于Spring Data Elasticsearch 4.2及以上版本,和你使用的Elasticsearch 7.15版本适配的Spring Data版本范围完全匹配。

  • 单查询独立配置方式
    如果不需要全局生效,仅针对特定查询开启该特性,可在构造查询时手动开启:
// 构造高亮查询
HighlightQuery query = new SimpleHighlightQuery(
        new MatchQueryBuilder("message", "搜索关键词")
);
// 配置高亮规则
HighlightBuilder.Field highlightField = new HighlightBuilder.Field("message")
        .preTags("<em>")
        .postTags("</em>")
        .numOfFragments(10);
query.addHighlightField(highlightField);
// 开启高亮合并到_source开关
query.setHighlightSource(true);
// 执行查询
SearchHits<DocEntity> result = elasticsearchOperations.search(query, DocEntity.class);

如果使用ElasticsearchRepository接口方式定义查询,可直接在查询方法上添加注解配置:

@Highlight(
        fields = {@HighlightField(name = "message")},
        preTags = "<em>",
        postTags = "</em>",
        highlightSource = true
)
List<SearchHit<DocEntity>> findByMessageContains(String keyword);

注意事项

开启该配置后,如果字段配置了多片段返回(numOfFragments>1),对应_source的字段值会自动转为数组类型,和你给出的预期返回格式完全一致;如果需要返回单个字符串,可将numOfFragments设置为1即可。


内容的提问来源于stack exchange,提问作者AR1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:45:03