1443 字
约 4 分钟
1
Elasticsearch IK 中文分词器入门

Elasticsearch IK 中文分词器入门

1. IK 分词器是什么?

analysis-ik 是 Elasticsearch / OpenSearch 的中文分析插件,它把 Lucene IK 分词能力集成进搜索引擎,并支持自定义词典。项目主要提供两个 Analyzer:

ik_smart
ik_max_word

(GitHub )

它解决的核心问题就是:

让 Elasticsearch 更合理地理解中文里的“词”。


2. 为什么需要中文分词?

英文天然存在空格:

I love Spring Boot

很容易拆成:

I
love
Spring
Boot

但是中文:

我喜欢使用SpringBoot开发项目

词与词之间没有天然空格。

搜索系统真正希望得到的是类似:

喜欢
SpringBoot
开发
项目

而不是单纯把整句话当成一个整体。

Elasticsearch 的 Analyzer 本身就是负责把文本转换成 Token,随后这些 Token 才会进入倒排索引。(Elastic )

所以:

中文文本
   ↓
IK 分词
   ↓
一个个词
   ↓
倒排索引
   ↓
关键词搜索

3. IK 什么时候使用?

如果项目存在:

中文文章搜索
商品搜索
知识库关键词检索
标题搜索
新闻搜索
文档全文检索

并且使用:

Elasticsearch / OpenSearch

就可以考虑 IK。

例如数据库里有:

Spring Boot 微服务开发实战

用户搜索:

微服务开发

ES 首先需要对文本进行分词,然后才能根据倒排索引进行关键词匹配。

因此 IK 服务的是:

Keyword Search
关键词检索

而不是:

Embedding
Vector Search
语义检索

这个区别非常重要。


4. ik_max_word 和 ik_smart

IK 最核心的就是这两个。

ik_max_word

尽可能细地拆词:

中华人民共和国国歌

会生成更多可能的词组合。

特点:

分词更多
召回率更高
索引词更多

比较适合:

建立索引

ik_smart

更加粗粒度:

中华人民共和国
国歌

特点:

词更少
结果更干净

官方项目也说明,ik_max_word 是细粒度切分,而 ik_smart 是粗粒度切分。(GitHub )

所以非常常见的配置是:

写入文档
↓
ik_max_word

用户搜索
↓
ik_smart

5. 和 Elasticsearch 怎么使用?

安装 IK 插件以后,可以给字段设置 Analyzer。

例如:

PUT article
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

这里:

analyzer

表示:

文档写入 ES 时怎么分词

而:

search_analyzer

表示:

用户搜索时怎么分词

这种 ik_max_word + ik_smart 的配置也是 analysis-ik 官方 README 给出的入门方式。(GitHub )


6. 查询时发生了什么?

保存:

{
  "title": "Java微服务开发实战"
}

大致经过:

Java微服务开发实战
        ↓
   ik_max_word
        ↓
Java
微服务
服务
开发
实战
...
        ↓
     ES索引

用户搜索:

微服务开发

经过:

微服务开发
     ↓
 ik_smart
     ↓
微服务
开发
     ↓
倒排索引匹配
     ↓
搜索结果

所以 IK 本身并不是:

搜索引擎

它更像 Elasticsearch 搜索之前的一道:

中文文本预处理器

7. 怎么查看 IK 分词结果?

开发时非常推荐使用 ES 的 _analyze API:

POST /_analyze
{
  "analyzer": "ik_max_word",
  "text": "新能源汽车充电解决方案"
}

然后观察 ES 实际拆出了哪些 Token。

换成:

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "新能源汽车充电解决方案"
}

就可以很直观地比较两个 Analyzer。


8. 自定义词典有什么用?

假设你的公司有一个产品:

星云智算平台

IK 可能不知道这是一个完整业务词。

这时候就可以加入:

自定义词典

例如:

星云智算平台
ChatGPT
SpringAI
公司内部产品名
行业专有名词

analysis-ik 支持扩展词典、停用词以及远程词典,并支持通过远程词典进行热更新。(GitHub )

这在:

电商
医疗
金融
企业知识库
专业技术文档

里面非常重要,因为这些业务通常有大量专业词。


9. IK 和语义搜索是什么关系?

这两个不要混。

IK
 ↓
中文分词
 ↓
倒排索引
 ↓
BM25
 ↓
关键词搜索

而语义搜索:

文本
 ↓
Embedding
 ↓
Vector
 ↓
向量相似度
 ↓
语义搜索

因此:

IK解决:
“有没有这些词?”

Vector解决:
“是不是这个意思?”

实际知识库系统可以两个一起使用:

                用户问题
                   ↓
          ┌────────┴────────┐
          ↓                 ↓
        IK分词          Embedding
          ↓                 ↓
     Keyword Search    Vector Search
          ↓                 ↓
         BM25             Semantic
          └────────┬────────┘
                   ↓
              Hybrid Search

10. 总结

IK 可以记成一句话:

IK 是 Elasticsearch 中非常常见的中文分词插件,用来提高中文关键词检索的分词和匹配效果。

核心链路:

中文
 ↓
IK
 ↓
Token
 ↓
Elasticsearch 倒排索引
 ↓
BM25
 ↓
关键词搜索

入门阶段只需要记住:

ik_max_word
→ 分得细
→ 常用于建立索引

ik_smart
→ 分得粗
→ 常用于搜索

以及:

IK = 关键词检索体系

Embedding = 语义检索体系

IK + Vector
= 可以进一步组成 Hybrid Search

这就足够开始实际使用 IK 了。

项目地址:analysis-ik GitHub

Elasticsearch IK 中文分词器入门
http://www.clxhxhhr.top/posts/564/
作者
clxstart
发布于
2026-09-11
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。