第三阶段 26 · highlight 高亮(返回命中片段)

发布时间:2026/9/28 0:55:25
第三阶段 26 · highlight 高亮(返回命中片段) 26 · highlight 高亮返回命中片段阶段第三阶段补充 / 查询结果增强EShighlight| PostgreSQLts_headline()全文检索高亮1. 概念搜索结果里把命中的关键词用标签标出来默认em.../em前端渲染成高亮就是highlight。它作用在参与打分的查询命中的字段上返回的是「带标记的片段fragment」而不是整段原文。2. PostgreSQL 对照-- PG 全文检索的高亮ts_headlineSELECTts_headline(english,description,to_tsquery(english,carbon))FROMsalesdataWHEREto_tsvector(english,description) to_tsquery(english,carbon);ts_headline就是 PG 版的 highlight把匹配词包成b.../b并截取片段。3. ES DSL基本高亮GET salesdata_idx/_search { query: { match: { description: carbon laptop } }, highlight: { fields: { description: {} } } }返回里每个 hit 多一个highlight段highlight:{description:[super light emcarbon/em emlaptop/em]}自定义标签 片段控制GET salesdata_idx/_search { query: { match: { description: carbon } }, highlight: { pre_tags: [mark], post_tags: [/mark], fragment_size: 120, // 每个片段长度 number_of_fragments: 3, // 最多返回几个片段 fields: { description: {} } } }多字段 整字段返回不截断highlight: { fields: { title: { number_of_fragments: 0 }, // 0 返回整段并高亮不切片 description: { fragment_size: 100 } } }4. Spring Boot 实现ComponentpublicclassDoc26Highlight{AutowiredprivateElasticsearchClientelasticsearchClient;/** 返回每条命中的高亮片段Map文档source, 高亮片段列表 */publicListHighlightHitsearch(StringindexName,Stringfield,Stringkeyword)throwsIOException{SearchResponseMaprespelasticsearchClient.search(s-s.index(indexName).query(q-q.match(m-m.field(field).query(keyword))).highlight(h-h.preTags(mark).postTags(/mark).fields(field,hf-hf.fragmentSize(120).numberOfFragments(3))),Map.class);ListHighlightHitresultnewArrayList();for(HitMaphit:resp.hits().hits()){// 命中的高亮片段在 hit.highlight() 里key 是字段名ListStringfragmentshit.highlight().getOrDefault(field,List.of());result.add(newHighlightHit(hit.source(),fragments));}returnresult;}publicrecordHighlightHit(MapString,Objectsource,ListStringfragments){}}高亮片段不在_source里而在hit.highlight()MapString, ListStringkey字段名。importco.elastic.clients.elasticsearch.core.search.Hit。5. 坑与最佳实践高亮只对“参与查询的字段”生效highlight.fields里的字段要和 query 命中的字段对应否则片段为空。filter上下文不高亮filter 不算分、不记录命中位置要高亮就把该条件放must/match。keyword高亮意义有限整串精确匹配没有“词”的概念高亮通常给text字段用。number_of_fragments: 0返回整段并高亮适合短标题大文本用切片避免返回过长。性能高亮要重新分析字段内容字段很大时开销明显必要时用fvhfast vector highlighterterm_vector加速。下一篇28-collapse-字段折叠去重.md列表去重随后29-suggester-自动补全.md。← 上一篇25-nested-嵌套对象与查询 总览 下一篇27-pipeline-管道聚合 →

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询