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 先分词为“停用”、“词汇”,后续停用词典也就无法匹配“停用词汇”这四个字

posted @ 2021-07-08 10:08  两道风  阅读(1010)  评论(0)    收藏  举报