IK 是做什么的
IK 是社区维护的中文分词插件(elasticsearch-analysis-ik)。Elasticsearch 自带的 standard 分析器对中文基本按单字切分,中文检索召回与相关度都不理想;装上 IK 后可获得词级切分,并且支持通过自定义词典补充专有名词。插件属于第三方组件,版本必须与集群严格对应。
基本信息
| 适用平台 | Elasticsearch 7.x / 8.x(自建集群) |
|---|---|
| 安装命令 | bin/elasticsearch-plugin install <插件 zip 的 URL 或本地路径> |
| 版本要求 | 插件版本号与 ES 版本严格一致 |
| 常用分析器 | ik_max_word(细粒度,索引期)、ik_smart(粗粒度,查询期) |
| 词典位置 | config/analysis-ik/ 下的主词典与停用词典 |
典型使用场景
- 中文站内搜索:标题、正文、商品名需要按词匹配而不是按单字
- 专有名词与品牌型号:词典没有的词会被切碎,导致召回偏低,需要补充自定义词典
- 中英混合内容:中文走 IK,英文单词仍按词处理
- 细索引粗查询:索引期用 ik_max_word 提高召回,查询期用 ik_smart 提升精确度
- 排查词搜不到:用 _analyze 看查询串与文档字段各自被切成了什么
安装示例
安装示例
# 下载与集群同版本的插件包后本地安装(8.x 示例,把 x.y.z 换成实际版本)
bin/elasticsearch-plugin install file:///tmp/elasticsearch-analysis-ik-8.x.y.zip
# 集群节点需逐个重启,重启前确认分片已恢复,避免一次性停整群
systemctl restart elasticsearch
# 验证插件已装好
bin/elasticsearch-plugin list
# 验证分词效果(请求体写法,比查询参数形式更稳)
GET /_analyze
{ "analyzer": "ik_smart", "text": "其其网文档中心" }映射配置
映射配置
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}分析器对照
| 分析器 | 切分粒度 | 适用位置 |
|---|---|---|
| ik_max_word | 最细粒度,穷尽可能的组合 | 索引期 analyzer,提升召回 |
| ik_smart | 粗粒度,做最少切分 | 查询期 search_analyzer,提升精确度 |
| standard | 按字符规则切分,中文基本单字 | 中文检索不建议作为主分析器 |
| 自定义词典 | 补充品牌、型号、行业术语 | 词典未命中时这些词会被切碎 |
索引期用 ik_max_word、查询期用 ik_smart 是常见组合:写入时尽量多切以扩大召回,查询时切得粗一些以减少噪声。两侧的分析器都要显式写清楚,别只配一半。
自定义词典扩展方式分本地与远程两类:远程词典(在 IKAnalyzer.cfg.xml 里配置地址)支持热更新,不用重启;本地词典文件的生效方式取决于插件版本,稳妥做法是重启节点后用 _analyze 验证。
更换字段分析器属于需要重建索引的变更:已写入的倒排索引不会自动重切,只改 mapping 会让新旧数据分词口径不一致,必须用 _reindex 重灌或按新映射重建。