阿里云Elasticsearch Serverless(简称ES Serverless)允许用户上传和管理词库,提供更为灵活高效的检索能力,使得用户能够根据业务需求灵活地自定义和调整分词策略,助力企业级用户构建智能、高性能的搜索与分析系统。
前提条件
进入词库管理
登录Elasticsearch Serverless控制台,在顶部菜单栏切换至目标地域。
在左侧导航栏单击应用管理,进入应用列表。
单击目标应用名称,进入应用详情页。
在左侧导航栏,单击词库管理,管理词库。
管理词库
添加自定义词库
单击添加自定义词库,在弹出的对话框中配置词库。
参数 | 说明 |
词库来源 |
|
词库类型 |
|
选择OSS Bucket | 选择与应用在同一个地域的存放目标词库的OSS Bucket。 |
选择文件 |
说明
|
更新词库配置
在目标词库的操作列,单击更新,在弹出的对话框中修改词库来源和更新后的词库文件。
不允许更改词库名称和类型。
选择的词库名称需要与源词库名称相同。
下载词库
在目标词库的操作列,单击下载,直接下载对应TXT
、DIC
文件至本地。
删除词库
删除操作:在目标词库的操作列,选择
,单击确认,删除词库。删除影响:在ES删除自定义词库(例如,IK分词器的扩展词典或停用词库)后,对搜索准确性及分词行为会产生如下影响。
分词粒度改变
新写入数据:删除词库后,新索引的文档将不再使用原词库规则分词。例如:删除金融专有名词词库后,
“量化交易”
可能被拆分为“量”、“化”、“交”、“易”
而非完整术语。历史数据:已索引文档的分词结果不受影响(因为分词发生在索引阶段),但搜索时若使用新分词规则,可能导致召回率下降。
搜索效果下降
召回率降低:搜索关键词可能无法匹配到原词库定义的复合词。例如:词库删除
“机器学习”
后,搜索“机器学习”
可能无法召回包含该术语的文档(搜索词将被拆分为“机器”、“学习”
)。准确率波动:停用词库删除后,无意义的词(例如,
“的”、“啊”
)将重新参与搜索,会增加噪声结果。
相关度评分偏移:词频(TF)、逆文档频率(IDF)等基于分词结果进行计算,词库删除后可能改变评分逻辑,影响排序合理性。
建议您:
非必要不删除词库,优先通过更新词库内容调整分词策略。
若必须删除词库且需修复历史数据,可通过“先更新词库,再对旧索引执行
_reindex
重建索引”确保数据分词一致性。
ik分词词库使用
本文中的命令,均可在Kibana控制台中执行。登录Kibana控制台,请参见登录Kibana控制台。
前提条件
已上传一个或多个ik自定义分词词库或停用词词库。
测试分词
执行以下代码测试分词效果。
# 可以进行分词测试,指定analyzer为 "ik_smart" or "ik_max_word"
GET /_analyze
{
"text": "中华人民共和国国歌",
"analyzer": "ik_smart"
}
返回结果如下。
{
"tokens" : [
{
"token" : "中华人民共和国",
"start_offset" : 0,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "国歌",
"start_offset" : 7,
"end_offset" : 9,
"type" : "CN_WORD",
"position" : 1
}
]
}
插入数据并验证分词
执行以下代码插入数据并验证分词。
# 创建索引并指定mapping中某个字段的分词为"ik_max_word",进行数据插入并查询分词验证
PUT /my_index
{
"mappings": {
"my_type": {
"properties": {
"text": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
#插入数据
POST /my_index/_doc/
{
"text": "我是中国人,我爱我的祖国"
}
GET /my_index/_analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人,我爱我的祖国"
}
返回结果如下。
{
"tokens" : [
{
"token" : "我",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "中国人",
"start_offset" : 2,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "中国",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "国人",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "我",
"start_offset" : 6,
"end_offset" : 7,
"type" : "CN_CHAR",
"position" : 4
},
{
"token" : "爱我",
"start_offset" : 7,
"end_offset" : 9,
"type" : "CN_WORD",
"position" : 5
},
{
"token" : "祖国",
"start_offset" : 10,
"end_offset" : 12,
"type" : "CN_WORD",
"position" : 6
}
]
}