Skip to content
Elasticsearch 查询与分析细节 · 第 1 篇 / 共 3 篇
领域数据与中间件
专题Elasticsearch 专题
当前序列Elasticsearch 查询与分析细节
阅读位置第 1 篇 / 共 3 篇当前专题第 3 个序列 / 共 6 个序列

分词器、Tokenizer 和 IK 到底怎么选

做 ES 检索时,分词方案选错,后面再怎么调查询 DSL 都很难补回来。因为召回范围、排序质量和误匹配率,很多时候在建索引那一刻就基本定型了。

先说结论

  • 先决定“要不要分词”,再决定“怎么分词”
  • 中文全文检索常用 IK,但 IK 不是所有字段的默认答案
  • 索引分词器和搜索分词器可以不同,目的是兼顾召回与精度

先把概念分清

Tokenizer 是什么

Tokenizer 负责把一段文本切成 token,是分析链里的第一步。它更像“怎么切”。

Analyzer 是什么

Analyzer = tokenizer + token filter + char filter。也就是说,Analyzer 不只负责切词,还负责大小写归一、停用词处理、同义词扩展等后续加工。

IK 是什么

IK 是中文分词插件,常用模式有 ik_max_wordik_smart。前者更偏召回,后者更偏收敛。

实战里怎么选

精确匹配字段不要乱分词

订单号、手机号、状态码、标签编码这类字段,通常应该用 keyword,而不是 text + 分词器。否则聚合和精确过滤都会变得不稳定。

中文全文检索优先从 IK 起步

搜索标题、商品名、文章正文时,可以优先用 IK 做基础方案。常见做法是索引用 ik_max_word 提高召回,查询用 ik_smart 降低噪音。

专业词汇多时要补词典

医疗、金融、商品品牌、技术词汇这类领域语料,如果不维护自定义词典,召回效果通常会比较差。

一个字段可以做多字段设计

例如同一个标题字段,既保留 text 做全文检索,也保留 keyword 子字段做排序、聚合和精确过滤,这是很常见也很实用的设计。

常见误区

所有字符串字段都上 IK

这样会让过滤、排序、聚合场景一起变乱,映射设计也会变得臃肿。

只看能不能搜到,不看误召回

召回太宽时,前几页结果会很差,用户体验不一定比“少召回一点”更好。

上线后才临时改分词器

分词策略变化往往要重建索引,代价不小。核心字段最好在设计期就想清楚。

一句话总结

分词选型的关键不是记住 IK,而是先区分精确匹配和全文检索,再用合适的 tokenizer 和 analyzer 去平衡召回与精度。

延伸阅读相关文章优先当前专题,再补跨专题关联。
同一序列 · 顺着当前主线继续读Match、Term、Bool、Aggregation 怎么组合适合把分词、复杂查询和深分页放到一起深入看。Elasticsearch 专题 · Elasticsearch 查询与分析细节同一序列 · 顺着当前主线继续读深分页为什么慢,以及 Scroll 和 Search After 怎么选适合把分词、复杂查询和深分页放到一起深入看。Elasticsearch 专题 · Elasticsearch 查询与分析细节同专题其他序列 · 共享标签:选型对比search_after、point in time 和 scroll 怎么选适合把 filter、nested、深分页、聚合和分层治理放在一条 Elasticsearch 查询主线上整理。Elasticsearch 专题 · Elasticsearch 查询机制与集群治理同专题其他序列 · Elasticsearch 索引设计与写入链路分词器和 normalizer 什么时候要一起设计适合把分词、动态字段、refresh、bulk 和 ingest pipeline 放在一条 Elasticsearch 写入主线上理解。Elasticsearch 专题 · Elasticsearch 索引设计与写入链路跨专题关联 · 同场景:方案选型半同步复制和异步复制怎么选适合把 next-key lock、一致性读、复制延迟和分库分表边界放回同一条一致性主线上判断。MySQL 专题 · MySQL 事务、锁与高可用边界跨专题关联 · 同场景:方案选型工厂模式怎么选适合把设计模式、对象创建和结构抽象能力放在一组里系统理解。架构与设计专题 · 设计模式与结构抽象
继续阅读Elasticsearch 查询与分析细节当前序列第 1 篇 / 共 3 篇当前专题第 3 个序列 / 共 6 个序列
往前看
上一序列Elasticsearch Mapping 与写入治理从第 1 篇开始:Elasticsearch Mapping 模板与动态字段
往后看
下一篇Match、Term、Bool、Aggregation 怎么组合继续当前序列下一章下一序列Elasticsearch 写入与分层架构从第 1 篇开始:refresh、translog 和 segment merge 怎么影响写入

把零散经验整理成可查、可复用、可持续更新的企业级知识门户