2019 年使用 Elasticsearch 7.x 时,我看到的高亮类似:
{
"highlight": {
"title": ["<em>专</em><em>题</em>1"]
}
}
期待的却是把“专题”作为一个整体高亮。这个现象值得检查分析器,但标签的切分本身不是分析结果的完整证据。
定义分析器,不等于字段使用它
当时在 settings 中定义了分析器,却没有把预期的分析方式明确绑定到相关字段。具备匹配版本的 IK 插件时,字段映射可能包含:
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
这只是字段定义片段,不是完整建索引请求或插件安装教程。自定义分析器的名称、tokenizer 名称和字段引用还要一致,且插件必须真实存在。
用字段分析请求看 token
先读取目标索引的 mapping,再使用该字段分析同一段文本:
GET /example_articles/_mapping
POST /example_articles/_analyze
{
"field": "title",
"text": "专题1"
}
观察 token、位置和偏移,再与实际查询使用的分析方式对照。ES 7.3 Analyze API
需要分清三个事实:配置中存在分析器、字段映射引用它、索引里的这批文档确实用它建立过词项。改变索引期分析配置通常涉及新索引和重建,不能认为保存配置会重新分析所有旧文档。
高亮还取决于查询
同时保存完整 DSL、highlighter 类型和原始返回。查询字段、显式 analyzer、短语或模糊条件,都可能改变匹配与高亮范围。
因此,这次经历能够说明字段绑定值得检查,但不能推广成“逐字高亮一定是 IK 没生效”。若问题是命中但完全没有高亮,可结合高亮为空的排查记录比较请求;两者不应预设为同一根因。