elasticsearch-ik分词器远程停用词汇"失效"问题
这其实是和自己没看 IK 源码有关。IK的原理是先分词,再查看是否有禁用词汇。
以下是 IK 读取到的远程分词配置和停用词配置

具体情况如下:

我当时认为配置了停用词汇后,出现“停用词汇”、“每小时加收”、“123456”这类的分词,是会将对应的词汇删除后,再去es库查询对应的关键字,以提高准确度
但是,使用 Kibana 发送分词指令后,
POST _analyze
{
"analyzer" : "ik_smart",
"text": "举例舒停用词汇"
}
发现“停用词汇”四个字并未被停用
{
"tokens" : [
{
"token" : "举例",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "舒",
"start_offset" : 2,
"end_offset" : 3,
"type" : "CN_CHAR",
"position" : 1
}
]
}
使用“每小时加收”词汇后,却是能正确分词。
# 分词查询
POST /kinth_ocr_new/_analyze
{
"analyzer" : "ik_smart",
"text": "举例舒每小时加收"
}
{“”
"tokens" : [
{
"token" : "举例",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "舒",
"start_offset" : 2,
"end_offset" : 3,
"type" : "CN_CHAR",
"position" : 1
}
]
}
原因很简单,就是一开始说的,因为IK分词器是先分词,再查看是否用禁用词汇。“每小时加收”是词典中有的,IK 分词后,会将“每小时加收”作为一个词,后面也就能匹到禁用词典。
而“停用词汇”并没有在词典中配置,所以 IK 先分词为“停用”、“词汇”,后续停用词典也就无法匹配“停用词汇”这四个字

浙公网安备 33010602011771号