📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入
Easysearch analysis-ik 多词典性能优化:从性能回退到分词性能提升 25%~30%

Easysearch 版 analysis-ik 相比开源 IK 有一个重要的增强:支持多词典。简单说就是不同字段可以挂不同词库,可以叠加默认词典,也可以只用自定义词典。这是开源单词典 IK 做不到的。

功能实现初期,主要精力放在把能力跑通上。但在后来的一次写入压测中,我们发现 Easysearch 的写入吞吐和 Elasticsearch 有明显差距,最终定位到问题出在多词典的实现方式上——字段最终该用哪套词典,本来应该在分词前就算好,结果代码里把这个选择丢进了分词的热路径,每次分词都要反复切词典、重复扫同一段文本。

这篇文章记录的就是我们怎么一步步把性能拉回来、最终反超基线的过程。


问题怎么冒出来的 #

4 月 20 号,我们跑了一轮系统级写入压测。数据、mapping、settings、并发和 bulk 参数都一样,Elasticsearch 8.19.5 和 Easysearch 2.1.2 的写入吞吐差距大得有点不对劲:

时间场景ElasticsearchEasysearch说明
2026-04-20 第 2 次有效重跑29900 docs / bulk=250 / concurrency=3 端到端写入压测129.44 docs/s31.21 docs/s这是整条写入链路的 docs/s,不是单独分词吞吐
2026-04-20 诊断样本5000 docs / bulk=250 / concurrency=3156.25 docs/s30.67 docs/sEasysearch 的累计索引耗时约为 Elasticsearch 的 8.0x
系统级 bulk 写入吞吐对比:Elasticsearch 129.44 docs/s,Easysearch 31.21 docs/s,差距约 4.15 倍

当时服务器上跑的就是早期多词典版本。后面修性能,追的就是这个版本和开源单词典 IK 基线之间的差距。

这一步还不能直接确定问题就在分词器。但差距摆在这儿了,得继续往下排。我们先排除了几个常见干扰因素:

  • refresh_interval
  • 动态同义词 HTTP 服务
  • mapping / settings 不一致
  • 网络层和 bulk 客户端本身

采样结果很快把范围收窄了。Elasticsearch 那边热点比较分散,Easysearch 这边呢,分词链路里出现了异常集中的开销——分词过程中反复做词典选择和字典查找。

瓶颈不在 Lucene 写入链路本身,就在 analysis-ik 的多词典实现上。

根因分析 #

第一类问题出在实现模型上。多词典想表达的是”这个字段最终用哪套词典”,这件事完全可以在分词前算好。但早期代码里,硬是把它变成了运行时的事:

  • “字段用哪个词典”变成了”运行时多轮扫描”——同一段文本对着多套词典各来一遍。
  • 全局字典切换的动作放进了每字符的热路径。
  • 结果就是同一段文本的扫描和查找成本翻了好几倍。

所以问题不是多词典天然慢,是实现把本该提前算好的东西塞进了热路径反复做。

第二类问题是后续优化过程中留下的额外开销。后面加的跨边界、停用词、长文本等测试本身不是性能问题的来源,它们的作用是把正确性边界补齐,确保每次优化不会改变分词结果。

最后通过性能分析确认,残留开销主要来自两处:缓存命中前还在做不必要的数据复制;诊断逻辑在生产热路径上产生了额外开销。修完之后这两处热点都从火焰图上消失了,说明性能回退确实来自真实的代码路径成本,不是测试抖动。

修复过程 #

整个修复分四个阶段。

第一阶段:把多词典从”运行时分发”收敛为”最终有效词典视图” #

多词典能力保留,但不再让分词器在热路径里反复切词典、重复扫文本。改成在分词前就把字段最终生效的词典算好,分词过程只面对一个已经收敛好的词典视图。

说白了就是把模型拉回正确方向——多词典管表达能力,热路径只管分词。

第二阶段:逐步打掉热路径上的常数开销 #

留下来的每一项优化,都经过正式性能测试和采样分析验证。原则就一条:不改分词语义,只减少热路径上反复发生的查找、分配和判断。

第三阶段:补齐正确性护栏 #

正确性测试必须先到位,不然吞吐提升没有意义——万一分词结果变了,跑得再快也白搭。

这一轮重点覆盖了这些容易出问题的场景:

  • 真跨边界场景
  • 数字和量词合并,如 1号
  • 自定义词典里的含符号词
  • 补充平面字符跨边界稳定性
  • 停用词过滤后的偏移量
  • 长文本样本的稳定性
  • 正式性能测试数据集的分词结果对齐

后面所有的吞吐数字,前提都是分词结果一致,避免把分词行为的变化误当成性能提升。

第四阶段:清理最后的残留开销 #

到 4 月 28 号,最后一轮修复集中处理两个地方:

  • 词典视图命中缓存时直接返回,不再多做一次数据复制
  • 诊断逻辑默认关掉,不让线上请求为调试能力买单

这两处修完,Easysearch 版 IK 就不只是恢复到单词典版本附近了,在正式测试里已经明显领先。

用数据看恢复过程 #

为了不把系统级写入压测和分词器性能测试混在一起,下面只看几个关键节点。2026-04-20docs/s 是系统级写入吞吐,后面的 tok/s 是单独的分词器吞吐。

这里说的”开源 IK 基线”就是开源 IK 的单词典实现对照版本。所有正式吞吐结论都建立在同一数据集、同一测试方法、分词结果一致的前提上。

时间口径关键结果说明
2026-04-23 17:02 CST初期本地复现服务器多词典版本 61.39 万 tok/s,单词典版本 114.48 万 tok/s单词典版本快 86.49%,性能差距被明确复现
2026-04-24 09:51:12~09:55:15 CST第一次正式追平smart 相对开源单词典基线 +7.26%从明显落后追到略微领先
2026-04-25 04:14~04:16 CST双模式阶段复核smart +16.88%max_word +20.09%领先优势开始扩大
2026-04-28 12:30:56 CST最新正式复核smart +30.96%max_word +21.31%当前最新结果

整个过程就是:

  • 先暴露出明显的性能退化
  • 逐步缩小差距
  • 追平,然后开始领先
  • 最终在分词结果完全一致的前提下,正式反超

最早的本地复现数据很关键:服务器当时跑的多词典版本只有 613896.67 tok/s,单词典版本 1144843.77 tok/s。后面所有修复就是冲着这个差距去的。

服务器多词典版本与单词典版本的分词吞吐起点对比:61.39 万 tok/s 对 114.48 万 tok/s
analysis-ik 修复主线:从明显落后到分词性能提升 25%~30%

三张图分别对应问题暴露、分词复现和修复结果:第一张展示服务器 bulk 写入吞吐的系统级差距;第二张展示多词典版本和单词典版本的本地分词差距;第三张展示分词结果对齐后,Easysearch 版 IK 怎么一步步追上来,最终实现 25%~30% 的分词性能提升。

为什么说 Easysearch 版 IK 现在更好 #

这次修复的价值不只是消灭了几个热点,更重要的是把多词典能力、分词正确性和性能测试体系一起补齐了。

1. 功能更强,性能代价可控 #

开源单词典 IK 模型简单,但表达能力也弱。Easysearch 的多词典能力要解决的是字段级词库隔离、自定义词典叠加这些实际需求。

关键问题是:能不能把这些能力的性能开销压到足够低。修复后的结果证明,可以。

2. 正确性护栏更完整 #

这轮补上的测试不只是几个短样例,覆盖了更容易翻车的边界条件:

  • 真跨边界场景
  • 长文本稳定性
  • 自定义词典和符号词
  • 数字量词合并
  • 停用词过滤后的偏移量

这意味着以后再做性能优化,必须同时保证分词结果不变。想靠改分词行为换吞吐,测试会先拦住。

3. 性能测试体系更严格 #

这轮之后,Easysearch 对 analysis-ik 的正式性能结论统一按一套标准出:

  • 同一数据集
  • 同一测试方法
  • smartmax_word 双模式
  • 分词结果一致
  • 有性能分析结果支撑

这套体系能避免两个常见坑:只看单轮吞吐波动就下结论,或者分词结果已经变了还在比性能。

小结 #

多词典能力在实现初期,主要精力放在功能补齐上——先把字段级词库隔离、自定义词典叠加这些能力跑通,性能优化是后面分阶段来的事,没办法一蹴而就。

这轮优化下来,核心思路其实就一条:把词典选择从分词热路径里挪出去,提前收敛好,让分词过程只面对最终的词典视图。再配合热点清理和正确性护栏,增强功能和更高性能完全可以兼得。

截至 2026 年 4 月 28 日,在本地 Mac 笔记本上的多轮 benchmark 中,Easysearch 版 IK 在 smart 模式大约领先开源单词典 IK 基线 25%~30%max_word 模式大约领先 20% 左右,分词结果完全一致。具体数字每次跑会有波动,但趋势是稳定的。

这也是 Easysearch 版 IK 相对开源版更有价值的地方:不是多了几个配置项,而是在多词典能力、分词正确性和分词性能三个方面都给出了可验证的结果。

标签
Easysearch x
Elasticsearch x
IK x
分词 x
performance x
插件 x
开发 x
自定义 x
扩展 x
AI x
幻觉 x
大模型 x
Agent x
产品更新 x
Mem0 x
MCP x
AI Agent x
向量检索 x
kNN x
规则引擎 x
银行 x
保险 x
风控 x
Rules x
Percolator x
国产 x
搜索 x
安全 x
Lucene x
GraalVM x
JDK x
2026 x
开源 x
赞助 x
开源生态 x
社区 x
Coco AI x
二等奖 x
兴智杯 x
人工智能 x
赛事 x
低空经济 x
商业化 x
数据分析 x
金猿奖 x
国产化 x
搜索引擎 x
技术卓越奖 x
创新产品奖 x
IT168 x
APM x
Skywalking x
Easy-Es x
Coco x
GitLab x
代码审核 x
石油石化 x
Gitee x
投票 x
Meilisearch x
Rust x
轻量级 x
搜索百科 x
Docker x
Docker Compose x
Easyserach x
Console x
DevOps x
国产替代 x
backup x
snapshot x
CCR x
Gateway x
esdump x
source_reuse x
ignore_above x
OpenSearch x
AWS x
Solr x
Easyearch x
发明专利 x
数据分区 x
国际专利 x
一等奖 x
人工智能应用创新大赛 x
bulk x
embedding x
OpenAI x
TDBC x
2025 x
信通院 x
可信数据库大会 x
搜索型数据库 x
中国数据库产业图谱 x
上海开源创新菁英荟 x
开源创新新星企业 x
Workshop x
AI 搜索 x
智能助手 x
Automation x
Logstash x
MongoDB x
开源中国 x
直播 x
merge x
Elasticsearch 9 x
GitCode x
AI搜索 x
Cloud x
rollup x
Kubernetes x
Operator x
Arm64 x
Snapshot x
S3 x
Grafana x
Opensearch x
Nginx x
直播活动 x
搜索客社区 x
Meetup x
ES x
企业搜索 x
DeepSeek x
RAG x
certificate x
windows x
Rollup x
TopN x
Filebeat x
Ubuntu x
请求限速 x
INFINI Console x
指标 x
Kibana x
多集群 x
client x
Spring Boot x
ECE x
ES Bulk x
vector database x
Postgres x
可搜索快照 x
SDK x
官网 x
Web 开发 x
Next.js x
React x
Three.js x
Metrics x
Helm x
filter x
querycache x
practice x
localStorage x
响应式 x
时间组件 x
时区组件 x
极限科技 x
三周年 x
周年庆 x
国家高新技术企业 x
校园招聘 x
湖北工业大学 x
Tauri x
Web 开发人员 x
桌面应用开发 x
桌面端 x
Electron x
Pizza x
认证培训 x
报名 x
Scrapy x
爬虫 x
Rust开发者大会 x
docsearch x
文档搜索 x
Easyseach x
有奖征文 x
黑神话悟空 x
EKS x
征文系列 x
跨集群搜索 x
科技中小企业 x
白皮书 x
Python SDK x
数据库产业图谱 x
超大规模 x
分布式集群 x
写入限流 x
2024可信数据库发展大会 x
创新型中小企业 x
搜索数据库 x
正排索引 x
免费许可证 x
K8S x
DTC2024 x
实时搜索 x
ES国产化 x
Redis x
OOM x
测试 x
内存 x
趋势 x
AI绘画 x
Stable Diffusion x
Diffusion x
Model x
GAN x
语义搜索 x
知识图 x
向量数据库 x
中国信通院 x
星河(Galaxy) x
标杆案例 x
鲲鹏 x
鲲鹏技术认证 x
客户端 x
日志平台 x
LDAP x
Loadgen x
中国一汽 x
国内数据库 x
墨天轮 x
监控系统 x
集成测试 x
ZSTD x
Helm Charts x
国产适配 x
兆芯 x
Linux x
LoongArch x
信创适配 x
二维拆分算法 x
中国移动云 x
Vault x
加密 x
安全工具 x
图片搜索 x
Alerting x
SQL x
Embedding x
可信数据库 x
统信 x
海光 x
龙芯 x
restore x
Arm x
大数据企业证书 x
移动云大会 x
信通院产品评测 x
国内首家 x
数据可视化 x
北京软协 x
第十届理事会会员单位 x
Apache Arrow x
宣传片 x
大会分享 x
多集群管理 x
无缝数据迁移 x
Loadrun x
INFINI Gateway x
log4j x