news 2026/4/18 15:23:53

ES 8.13.4 如何配置 IK 分词同义词库(附完整实战代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ES 8.13.4 如何配置 IK 分词同义词库(附完整实战代码)

这是一篇为您定制的技术博客,完全基于您提供的Jieba分词配置逻辑,并将其转换为适用于 Elasticsearch 8.13.4 和 IK分词器的实现方案。


在使用 Elasticsearch 进行中文搜索时,IK 分词器几乎是标配。但在实际业务中(如电商、内容搜索),用户输入的词和文档中的词往往不完全一致。例如用户搜“番茄”,但文档里写的是“西红柿”或“圣女果”。如果不能识别这些同义词,搜索体验会大打折扣。

本文将基于Elasticsearch 8.13.4,手把手教你如何配置 IK 分词器结合同义词库,实现搜索效果的质的飞跃。


1. 环境准备

  • Elasticsearch: 8.13.4
  • IK Analysis Plugin: 需提前安装
    • 如果你还没安装,进入 ES 安装目录执行:
      ./bin/elasticsearch-plugininstallhttps://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.13.4/elasticsearch-analysis-ik-8.13.4.zip
    • 安装后重启 ES。

2. 创建同义词库文件

首先,我们需要告诉 ES 哪些词是同义的。

  1. 进入 Elasticsearch 的安装目录,找到config文件夹。
  2. config目录下创建一个新的文件夹,命名为ik_synonyms(名字自取,方便识别即可)。
  3. config/ik_synonyms目录下创建一个文本文件,例如my_synonyms.txt

文件内容格式(非常重要)
每一行代表一组同义词,词与词之间用英文逗号,隔开。第一个词通常作为主词。

番茄,西红柿,圣女果 土豆,马铃薯,洋芋 计算机,电脑,pc

注意:ES 8.x 对文件路径的检查比较严格,建议使用classpath:路径或者绝对路径,但在config目录下通常可以直接通过文件名引用(视具体版本配置而定,为了保险,下文配置中会使用classpath方式的变体,实际上在 config 下创建文件夹后,直接写文件名通常也能被加载)。


3. 配置索引 Mapping 与 Analyzer

这是核心步骤。我们需要创建一个索引,在其中定义一个新的 Analyzer(分析器),该分析器使用 IK 分词器,并在其后叠加一个同义词过滤器(Synonym Token Filter)。

在 Kibana Dev Tools 中执行以下命令:

PUT/product_index{"settings":{"analysis":{"filter":{"my_synonym_filter":{"type":"synonym","synonyms_path":"ik_synonyms/my_synonyms.txt"}},"analyzer":{"ik_synonym_analyzer":{"type":"custom","tokenizer":"ik_max_word","filter":["my_synonym_filter"]},"ik_synonym_search_analyzer":{"type":"custom","tokenizer":"ik_max_word","filter":["my_synonym_filter"]}}}},"mappings":{"properties":{"name":{"type":"text","analyzer":"ik_synonym_analyzer","search_analyzer":"ik_synonym_search_analyzer"}}}}

配置解析:

  1. filter部分
    • 定义了一个名为my_synonym_filter的过滤器。
    • 类型为synonym,并指定了刚才创建的同义词文件路径ik_synonyms/my_synonyms.txt
  2. analyzer部分
    • 我们自定义了一个ik_synonym_analyzer
    • tokenizer: “ik_max_word”:使用 IK 分词的细粒度模式(也可以用ik_smart粗粒度)。
    • filter: 将 IK 分词后的结果,传入我们的同义词过滤器。这意味着如果 IK 分出了“番茄”,过滤器会把它扩展成“番茄”、“西红柿”、“圣女果”三个 Token。
  3. mappings部分
    • 将字段name的分析器设置为我们刚定义的ik_synonym_analyzer

4. 插入测试数据

为了验证效果,我们插入几条包含同义词的数据:

POST/product_index/_doc/1{"name":"圣女果"}POST/product_index/_doc/2{"name":"番茄"}POST/product_index/_doc/3{"name":"番茄酱"}POST/product_index/_doc/4{"name":"西红柿炒鸡蛋"}POST/product_index/_doc/5{"name":"土豆丝"}

5. 实战搜索效果对比

现在到了见证奇迹的时刻。我们来搜索“番茄”,看看能不能把“圣女果”和“西红柿”都搜出来。

场景一:使用配置了同义词的索引搜索

GET/product_index/_search{"query":{"match":{"name":"番茄"}}}

预期结果
你会发现文档 1(圣女果)、文档 2(番茄)、文档 3(番茄酱)、文档 4(西红柿炒鸡蛋)全部被命中

原理分析

  1. 搜索词“番茄”进入ik_synonym_search_analyzer
  2. IK 分词器将其分为["番茄"]
  3. 同义词过滤器发现“番茄”在词库中,扩展为["番茄", "西红柿", "圣女果"]
  4. ES 去倒排索引中匹配这三个词,因此所有包含这三个词中任意一个的文档都被找出来了。

场景二:搜索“土豆”

GET/product_index/_search{"query":{"match":{"name":"土豆"}}}

结果: 只命中文档 5(土豆丝)。
注:如果你希望“马铃薯”也能被搜到,记得在同义词文件里加一行土豆,马铃薯


6. 进阶:同义词的扩展格式

IK 分词配合同义词过滤器非常强大,它支持 Solr 的同义词格式。

1. 显式映射(推荐)
如果你只想让“番茄”能搜到“西红柿”,但不想让“西红柿”搜到“番茄”(单向),可以使用=>

番茄 => 西红柿, 圣女果

2. 别名(Aliases)
如果你希望“番茄”和“西红柿”完全等价,互搜互得,用逗号即可(如上文配置)。

3. 保持原词并扩展(默认)
默认情况下,synonymfilter 会保留输入词。例如搜“番茄”,实际查询的是(番茄 | 西红柿 | 圣女果)


7. 常见坑点排查

  1. 分词器不生效?

    • 检查elasticsearch.yml中是否允许动态修改 analyzer(默认允许)。
    • 使用_analyzeAPI 调试:
      GET/product_index/_analyze{"analyzer":"ik_synonym_analyzer","text":"我要买番茄"}
      查看返回的 tokens 是否包含了同义词。
  2. 文件找不到报错?

    • ES 8.x 对资源文件的隔离较严格。确保my_synonyms.txtES_HOME/config/ik_synonyms/下。
    • 如果在 Docker 中运行,需要通过 Volume 挂载该文件到容器内的/usr/share/elasticsearch/config/ik_synonyms/
  3. 重启问题

    • 修改同义词文件后,不需要重启 ES,但需要关闭并重新打开索引(Close/Open Index),或者重新创建索引,因为同义词规则是在索引创建时加载到倒排索引中的。

总结

通过IK 分词 + Synonym Filter的组合拳,我们可以用极低的成本解决中文搜索中的“词不达意”问题。相比 Jieba 分词,IK 分词在 ES 中的集成更加原生和稳定,配置方式也大同小异,只需将 Tokenizer 替换为ik_max_word即可。

赶紧去你的 ES 里试一试吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 9:39:24

项目管理工具Kanass:轻量、简洁、开源、免费

为了保证项目高效、有序地推进,我们通常使用如Jira等项目管理工具。Jira整体功能完善,自定义能力强大,但配置繁琐,上手难度大,同时随着Atlassian销售策略调整Jira server中国区即将停止维护,今天给大家推荐…

作者头像 李华
网站建设 2026/4/18 5:44:23

Java毕设选题推荐:基于springboot的校园传统文化交流系统整合诗词、书法、戏曲、传统节日等多元文化资源【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/18 11:56:30

专科生必看!9个高效降AI率工具推荐,轻松应对AIGC检测

专科生必看!9个高效降AI率工具推荐,轻松应对AIGC检测 AI降重工具,让论文更“自然” 随着AIGC技术的普及,越来越多的专科生在撰写论文时面临一个共同的问题——如何降低AI生成痕迹,避免查重率过高。尤其是在学术写作中…

作者头像 李华
网站建设 2026/4/18 3:24:29

2025最新!8个AI论文工具测评:研究生开题报告神器推荐

2025最新!8个AI论文工具测评:研究生开题报告神器推荐 学术写作工具测评:为什么需要这份2025榜单 随着AI技术的快速发展,越来越多的研究生开始借助AI论文工具提升写作效率。然而,面对市场上五花八门的产品,如…

作者头像 李华
网站建设 2026/4/17 22:58:47

Open-AutoGLM+微信自动化=效率翻倍?专家亲授7步落地法

第一章:Open-AutoGLM自动打开微信教学 环境准备与依赖安装 在使用 Open-AutoGLM 实现自动化操作前,需确保本地已配置 Python 环境(建议 3.8)并安装必要的依赖库。核心依赖包括 pyautogui、 opencv-python 和 keyboard&#xff…

作者头像 李华
网站建设 2026/4/17 17:51:09

Open-AutoGLM模型部署难题全攻克,手把手教你7步完成本地化运行

第一章:Open-AutoGLM模型的开源模型概述Open-AutoGLM 是一个基于 GLM 架构设计的开源自动推理语言模型,旨在提供高效、可扩展的自然语言理解与生成能力。该模型由社区驱动开发,支持多场景任务适配,包括文本摘要、代码生成、对话系…

作者头像 李华