阿里云Elasticsearch Serverless(简称ES Serverless)内置增强型IK分词插件,支持上传自定义词库,并可为不同索引或分析器配置独立词库,实现词库的分级管理与作用域隔离,助力企业构建更精准、灵活的中文检索能力。本文介绍如何添加、使用及管理IK分词词库。
背景信息
IK分词插件用于将连续的中文句子切分为有意义的词语,其主要组成如下:
插件组成 | 描述 | 分词规则及词库类型 |
分词器 | 负责将中文文本拆分为有意义的词语(Token),决定分词粒度。 | 支持的分词规则如下:
|
词库文件 | 提供词汇基础,分词器需基于词库文件进行分词。 说明 词库文件要求每行一个词,并保存为 | IK分词插件内置默认的主词库( 您也可根据业务需要添加自定义词库,优化分词效果。支持添加的词库类型如下:
|
ES Serverless默认内置增强型IK分词插件,可实现词库的配置体系分级与作用域隔离。您可为不同索引或分析器配置独立的分词词库,实现精细化管理。
高优先级词库配置会完全覆盖低优先级词库配置,即当多个词库对同一个词或分词规则定义不同时,以高优先级的词库配置为准。
词库级别 | 核心优势 | 作用域 | 优先级 |
分析器 (Analyzer) 级别 | 提供精细化控制,实现同一索引的不同字段可使用不同词库。 | 目标自定义分析器 | 最高 |
索引 (Index) 级别 | 实现业务隔离,不同索引(例如,产品库、文章库)可拥有独立的词库。 | 目标索引 | 中等 |
应用 (Application) 级别 | 提供基础词库,方便快速使用。 说明 内置词库默认为应用级别。 | 应用全局 | 最低 |
使用限制
词库数量及大小限制:最大支持上传
10
个词库文件,并且所有词库文件的大小总和不超过20
MB。若词库文件总数超过上限,请合并相关文件,或通过调整max_dics_count配额来提高最大支持上传的词库文件限额。
若词库文件总大小超过上限,请压缩相关文件,或通过调整max_all_dic_size配额来提高词库文件总大小的限额。
词库格式限制:仅支持将
DIC
格式的文件添加为词库。
进入词库管理
进入应用详情页。
登录Elasticsearch Serverless控制台,在顶部菜单栏切换至目标地域。
在左侧导航栏单击应用管理,单击已创建的应用名称,进入应用详情页。
- 页签,您可按需
添加词库
在词库管理页面单击添加自定义词库,输入词库名称,按照界面指引添加IK分词词库或IK停用词词库。您可通过如下方式上传词库文件。
词库名称必须在当前应用内唯一,并且词库添加成功后名称不可更改。
新词库添加后,仅支持对新创建的索引进行分词,存量索引不会基于该词库进行重新分词。因此,建议您对存量索引使用旧词库,而对新创建的索引使用新词库进行分词。
从本地上传:单击
图标或通过拖拽方式上传本地文件。
从OSS文件上传:选择目标OSS Bucket中的指定文件进行上传。
配置并使用词库
词库文件上传完成后,大约需要2min
生效。您可在词库生效后,进入Kibana配置并使用词库进行分词。
验证词库的有效性
您可使用POST /_analyze
接口,测试添加的词库是否生效。示例代码如下。
POST /_analyze
{
"analyzer": "ik_smart",
"text": "租户专用词汇测试"
}
索引级别词库配置
示例创建一个名为 products
的索引,并且该索引使用business-terms
、product-names
分词词库,及stop-words
停用词词库进行分词。
执行该操作前,需先将相关词库添加至应用中。
PUT /products
{
"settings": {
"index": {
"ik": {
"extra_dict_ids": ["business-terms", "product-names"],
"extra_stop_dict_ids": ["stop-words"]
}
}
},
"mappings": {
"properties": {
"title": { "type": "text", "analyzer": "ik_max_word" },
"content": { "type": "text", "analyzer": "ik_smart" }
}
}
}
extra_dict_ids:表示添加的自定义IK分词词库。
extra_stop_dict_ids:表示添加的自定义IK停用词词库。
分析器级别词库配置
方式一:通过
自定义分析器(analyzer)+自定义分词器(tokenizer)
方式,在分词器中配置自定义词库,扩展性强,适用于复杂业务。示例创建一个名为
custom_analyzer_index
的索引,并配置对my_ik_analyzer
分析器使用analyzer-specific-dict
、special-terms
分词词库,及analyzer-stop-words
停用词词库,实现对content
字段使用独立词库进行分词。说明执行该操作前,需先将相关词库添加至应用中。
PUT /custom_analyzer_index { "settings": { "analysis": { "analyzer": { "my_ik_analyzer": { "type": "custom", "tokenizer": "ik_tokenizer", "filter": ["lowercase"] } }, "tokenizer": { "ik_tokenizer": { "type": "ik_max_word", "use_smart": false, "enable_lowercase": true, "extra_dict_ids": ["analyzer-specific-dict", "special-terms"], "extra_stop_dict_ids": ["analyzer-stop-words"] } } } }, "mappings": { "properties": { "content": { "type": "text", "analyzer": "my_ik_analyzer" } } } }
extra_dict_ids:表示添加的自定义IK分词词库。
extra_stop_dict_ids:表示添加的自定义IK停用词词库。
方式二:直接在分析器定义中配置自定义词库,简洁高校,适用于标准场景。
创建一个名为
analyzer_level_index
的索引,并定义两个分析器,实现同一个索引中,不同字段使用独立的词库进行分词。说明执行该操作前,需先将相关词库添加至应用中。
product_analyzer
分析器:使用product-dict
、brand-names
分词词库,及product-stop-words
停用词词库,对product_name
字段进行分词。content_analyzer
分析器:使用content-dict
、technical-terms
分词词库,及content-stop-words
停用词词库,对description
字段进行分词。
PUT /analyzer_level_index { "settings": { "analysis": { "analyzer": { "product_analyzer": { "type": "ik_smart", "extra_dict_ids": ["product-dict", "brand-names"], "extra_stop_dict_ids": ["product-stop-words"] }, "content_analyzer": { "type": "ik_max_word", "extra_dict_ids": ["content-dict", "technical-terms"], "extra_stop_dict_ids": ["content-stop-words"] } } } }, "mappings": { "properties": { "product_name": { "type": "text", "analyzer": "product_analyzer" }, "description": { "type": "text", "analyzer": "content_analyzer" } } } }
extra_dict_ids:表示添加的自定义IK分词词库。
extra_stop_dict_ids:表示添加的自定义IK停用词词库。
管理词库
词库添加后,您可在词库管理页面查看词库的基本信息,或按需执行词库的下载、更新、删除等操作。
查看词库:可查看词库的类型、来源、文件大小及词条数量等信息。
下载词库:可将该词库中的词库文件下载至本地。
更新词库:可将业务所需的最新词库文件更新至当前词库中。
重要词库更新过程不会导致业务中断,更新后,仅影响新写入数据的分词,存量索引不会使用新词库进行分词。由于新旧分词逻辑不一致,可能导致历史数据无法查询。
如需对存量索引均采用最新词库进行分词,可执行
POST /your_index/_update_by_query
操作,将目标索引中的所有文档按照最新分词规则重新分词。为避免对业务产生其他影响,请在业务低峰期执行该操作。
删除词库:若当前词库无需使用,可将其删除。词库删除后无法恢复,请谨慎操作。
重要建议您非必要不删除词库,优先通过更新词库内容调整分词策略。
若必须删除词库且需修复历史数据,可通过“先更新词库,再对旧索引执行
_reindex
重建索引”确保数据分词一致性。
更新或删除词库影响
更新或删除词库,可能对搜索准确性及分词行为会产生如下影响:
分词粒度改变
新写入数据:更新或删除词库后,新索引的文档将不再使用原词库规则分词。
历史数据:已索引文档的分词结果不受影响,但搜索时若使用新分词规则,可能导致召回率下降。
搜索效果下降
召回率降低:搜索关键词可能无法匹配到原词库定义的复合词。例如:词库删除
“机器学习”
后,搜索“机器学习”
可能无法召回包含该术语的文档(搜索词将被拆分为“机器”、“学习”
)。准确率波动:停用词库删除后,无意义的词(例如,
“的”、“啊”
)将重新参与搜索,会增加噪声结果。
相关度评分偏移:词频(TF)、逆文档频率(IDF)等基于分词结果进行计算,词库更新或删除后可能改变评分逻辑,影响排序合理性。