当前位置: 首页 > news >正文

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

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

阶段:第三阶段补充 / 查询结果增强
ES:highlight| PostgreSQL:ts_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 <em>carbon</em> <em>laptop</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, 高亮片段列表> */publicList<HighlightHit>search(StringindexName,Stringfield,Stringkeyword)throwsIOException{SearchResponse<Map>resp=elasticsearchClient.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);List<HighlightHit>result=newArrayList<>();for(Hit<Map>hit:resp.hits().hits()){// 命中的高亮片段在 hit.highlight() 里,key 是字段名List<String>fragments=hit.highlight().getOrDefault(field,List.of());result.add(newHighlightHit(hit.source(),fragments));}returnresult;}publicrecordHighlightHit(Map<String,Object>source,List<String>fragments){}}

高亮片段不在_source里,而在hit.highlight()Map<String, List<String>>,key=字段名)。
import:co.elastic.clients.elasticsearch.core.search.Hit


5. 坑与最佳实践

  1. 高亮只对“参与查询的字段”生效highlight.fields里的字段要和 query 命中的字段对应,否则片段为空。
  2. filter上下文不高亮:filter 不算分、不记录命中位置;要高亮就把该条件放must/match
  3. keyword高亮意义有限:整串精确匹配没有“词”的概念,高亮通常给text字段用。
  4. number_of_fragments: 0返回整段并高亮(适合短标题);大文本用切片避免返回过长。
  5. 性能:高亮要重新分析字段内容,字段很大时开销明显;必要时用fvh(fast vector highlighter)+term_vector加速。

下一篇

28-collapse-字段折叠去重.md(列表去重),随后29-suggester-自动补全.md


← 上一篇:25-nested-嵌套对象与查询 | 总览 | 下一篇:27-pipeline-管道聚合 →

http://www.jsqmd.com/news/1321186/

相关文章:

  • 企业级AI原型生成工具挑选指南:国产私有化部署与版权合规详解
  • 小微企业注销代办 四川高性价比机构推荐 - 互联网科技品牌测评
  • 2026年8月上海存储设备销毁品牌排行,哪家靠谱?
  • 2026临淄区工业烧碱厂家哪家好?污水处理烧碱怎么选不踩坑——超全避坑指南 - GEO99
  • Cheat Engine 内存扫描与修改实战指南:从原理到逆向工程应用
  • 数字化工厂蓝图:建设路径与实施路线全攻略
  • 怎样在Windows上轻松搞定PDF处理?Poppler-Windows的完整实战指南
  • 解决MediaPipe安装问题:手动安装whl文件指南
  • 多智能体搜索域名多样性工具:从输入校验到离线报告的完整实现
  • 出国驾驶证公证怎么办?出行日临近,高效出具合规公证书的方法! - 实用干货补给站
  • 专科生求职必备:降AI率工具包实战指南
  • 英雄联盟Akari助手:深度实战指南与高效游戏自动化解决方案
  • 答辩 PPT 做了 3 天,导师说“重做“——大学生的 PPT 困境该结束了
  • Demo能跑不代表能用:Agentic AI进团队的真实门槛
  • 名包回收2026邯郸圣罗兰闲置包包出手指南 毓典寄卖行十年连锁门店 - 米諾
  • 计算机毕业设计之基于SpringBoot+Vue的BJD(球型关节人偶)交流平台
  • 1999-2025年上市公司绿色持续创新水平测度数据集
  • Spring Boot 自动装配不是魔法:@ConditionalOnMissingBean 失效那天,我们重读了 spring.factories 的加载顺序
  • AI Agent实战:内容创作与6G查询双突破
  • 【信息科学与工程学】【安全领域】 第八十九篇 网络空间安全中的问题分析02
  • COMSOL光学仿真:透镜光场演变分析与优化
  • HRTOS任务嵌套深度详解
  • 代办公证委托书怎么办理?完整办理攻略 - 牛人办
  • SpringBoot+Vue构建旅游电商平台的技术实践
  • PotPlayer字幕翻译插件终极指南:3步实现百度翻译API实时字幕翻译
  • 施密特触发器:带迟滞特性的比较器,有效消除噪声、稳定输出!
  • Spring Boot MongoDB连接池配置与调优实战
  • 实用指南:使用WinAsar高效管理Electron应用的asar归档文件
  • 不止是调参——如何结合业务数据设计AI优化方案(附案例)
  • 天津全屋定制哪家好?深耕津门源头工厂,门墙柜一体化高定优选 - 产品推荐官