hightlinging简单用法:
-
本文中展示的简单用法足够支持大多数业务
-
pre_tags 高亮词语的前置标签
-
post_tags 高亮词语的后置标签
-
highlight_query 指明了在查询词语中,哪些词语需要高亮处理
GET kibana_sample_data_logs/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"match": {
"message": {
"query": "type:astronauts elasticsearch Mozilla",
"analyzer": "standard"
}
}
}
]
}
},
"highlight": {
"highlight_query": {
"bool": {
"must": [
{
"match": {
"message": "Mozilla"
}
}
]
}
},
"fields": {
"message":{
"pre_tags": [""],
"]
"post_tags": ["
}
}
}
}
| 属性名 | 作用 | 你的例子写法 | 通俗解释 |
|---|---|---|---|
highlight |
开启搜索结果高亮,是顶级节点 | "highlight": {} |
告诉 ES:我要对结果做关键词高亮 |
highlight_query |
指定单独的高亮查询 | "bool": { "must": [ { "match": { "message": "Mozilla" } } ] } |
只高亮 Mozilla,不高亮其他搜索词 |
fields |
指定对哪个字段高亮 | "message": {} |
只对 message 字段做高亮 |
pre_tags |
高亮内容前缀标签 | ["<h1>"] |
匹配词前面加 <h1> |
post_tags |
高亮内容后缀标签 | ["</h1>"] |
匹配词后面加 </h1> |
hightlinging高级使用:
| 属性名 | 作用 | 示例写法 | 通俗解释 |
|---|---|---|---|
| type | 指定高亮器类型(高级核心) | "type":"fvh" | 切换 unified / plain / fvh 三种高亮模式 |
| fragment_size | 控制单条高亮片段字数 | "fragment_size":200 | 截取关键词前后指定长度的文本片段 |
| number_of_fragments | 控制返回高亮片段数量 | "number_of_fragments":2 | 一篇文档最多返回几条高亮片段 |
| no_match_size | 无关键词匹配时兜底文本长度 | "no_match_size":100 | 没有命中高亮词,默认返回正文前N字摘要 |
| matched_fields | FVH 专属多字段合并高亮 | ["content","content.ik"] | 多个字段的匹配结果,合并在一个字段高亮展示 |
三种高亮器(type)完整高级特性
ES 高亮核心高级能力就是切换 type 高亮器,三种类型覆盖所有生产场景。
1、unified(默认高亮器)
ES7+ 系统默认,自适应高亮器,无需任何 mapping 配置,兼顾性能与准确度,通用场景首选。
特点:自动适配普通文本/词向量文本,支持所有查询类型,稳定性最高。
2、plain(基础高亮器)
老旧高亮器,查询时实时分词计算,无需索引配置。
特点 :小文本可用,大文本极卡 CPU,不支持多字段合并高亮,生产不推荐用于正文。
3、fvh(高性能向量高亮器·生产核心)
大文本、正文、文档搜索专用高亮器,性能最强,唯一支持多字段合并高亮。
强制 Mapping 依赖:字段必须配置词向量+独立存储
"content": { "type": "text", "term_vector": "with_positions_offsets", "store": true }
作用解释:
-
term_vector:索引时预存分词位置、偏移量,高亮无需实时计算
-
store:独立存储字段内容,不解析大体积 _source,性能翻倍
2.3 高级 Demo1:FVH 高性能高亮(大文本生产标配)
适用于文章、知识库、日志正文等大文本场景
GET /my_fvh_demo/_search { "query": { "match": { "content": "ES 高亮 FVH 性能优化" } }, "highlight": { "type": "fvh", "pre_tags": ["<mark>"], "post_tags": ["</mark>"], "fragment_size": 200, "number_of_fragments": 2, "no_match_size": 100, "fields": { "content": {} } } }
2.4 高级 Demo2:FVH 独有能力------多字段合并高亮
场景:主字段+分词子字段同时搜索,所有匹配词统一在主字段高亮展示,仅 FVH 支持
GET /my_fvh_demo/_search { "query": { "multi_match": { "query": "Fast Vector 高亮器", "fields": ["content","content.english"] } }, "highlight": { "type": "fvh", "pre_tags": ["<b style='color:red'>"], "post_tags": ["</b>"], "fields": { "content": { "matched_fields": ["content","content.english"] } } } }
2.5 高级 Demo3:unified 默认高亮完整配置(通用业务标配)
GET kibana_sample_data_logs/_search { "track_total_hits": true, "query": { "match": { "message": "elasticsearch Mozilla" } }, "highlight": { "type": "unified", "fragment_size": 150, "number_of_fragments": 1, "no_match_size": 50, "pre_tags": ["<span style='color:red'>"], "post_tags": ["</span>"], "fields": { "message": {} } } }
全部字段高亮展示:
基于一个查询关键词查询出来的所有包含关键字的部分都会高亮展示
require_field_match = 是否要求 "查询字段" 和 "高亮字段" 必须是同一个?
true(默认):必须同一个字段才能高亮→ 查 message → 只高亮 messagefalse:不用同一个字段→ 查 message → message、url、xxx 全都能高亮
案例展示:查询message的关键字,如果在url中存在,也会高亮
GET kibana_sample_data_logs/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"match": {
"message": "Mozilla Firefox elastic"
}
}
]
}
},
"highlight": {
"require_field_match": "false",
"fields": {
"message":{},
"url":{}
}
}
}
number_of_fragments
控制返会高亮字段的数量:
案例中展示的是:
在设置最大数量是1之后,返回的截图和未设置返会截图的对比,由此可见配置生效
GET kibana_sample_data_logs/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"match": {
"message": "Mozilla Firefox elastic"
}
}
]
}
},
"highlight": {
"number_of_fragments": 1,
"require_field_match": "false",
"fields": {
"message":{},
"url":{},
"request":{}
}
}
}


这个参数可以在顶级配置中使用,也可以在当前字段的配置中使用,大家按需使用就好了。下面展示了一下使用的不同方式:
GET kibana_sample_data_logs/_search
{
"track_total_hits": true,
"query": {
"bool": {
"must": [
{
"match": {
"message": "Mozilla Firefox elastic"
}
}
]
}
},
"highlight": {
"number_of_fragments": 1,
"require_field_match": "false",
"fields": {
"message":{
"number_of_fragments": 2
},
"url":{},
"request":{}
}
}
}
fragment_size
控制单条高亮片段字数,使用方式通number_of_fragments相同。
order
order 是用来控制:当一个字段里有多个高亮片段时,按什么顺序返回给你。
它只有 2 个可选值
"order": "score" // 默认:按匹配分数排序(最相关的排前面)
"order": "none" // 按文本在文档里**出现的先后顺序**排序