首页 > 其他 > 详细

elasticsearch中切词插件-ik

时间:2020-01-06 21:49:24      阅读:75      评论:0      收藏:0      [点我收藏+]

ElasticSearch中常用的中文切词器为 analysis-ik, 是个第三方插件;

ik主要有两种切词方式,一个是细粒度,一个是粗粒度,分别对应“ik_max_word”和“ik_smart”。

下面分别用实例看下他们切词结果的差异:

技术分享图片

 

技术分享图片

query: 北京百度网讯科技有限公司

ik_max_word: 北京;京;百度网;百度;百;度;网讯;网;讯;科技有限公司;科技有限;科技;有限公司;有限;有;限;公司;

ik_smart: 北京;百度;网讯;科技有限公司;

 

query: 重庆百业兴科技有限公司

ik_max_word: 重庆;庆;百业;百;业;兴;科技有限公司;科技有限;科技;有限公司;有限;有;限;公司;

ik_smart: 重庆;百业;兴;科技有限公司;

 

query: 查看通过分析器进行切词的结果

ik_max_word: 查看;通过;通;过分;分析器;分析;析;器;进行;行;切;词;结果;结;果;

ik_smart: 查看;通过;分析器;进行;切;词;结果;

 

(ik_max_word 竟然连“过分”都可以切出来,所以在生成倒排索引的时候,会比ik_smart多一倍以上的索引量,所以,效果虽好,评估好自己的ES存储空间再做合适的选择)

 


 

 

那么问题来了,既然ik_max_word要多占用非常大的空间,我就选择了ik_smart,但是ik_smart对特定的词切的简直太粗了,比如“科技有限公司”是作为一个完整的词切出来的,如果我的doc是“小米科技北京有限公司”,那这时候用“科技有限公司”是召回不了这条结果的;所以这种情况下,能不能认为进行干预呢?

是可以的,上面的情况中,其实我们是想“科技有限公司”最好是切成“科技”和“有限公司”,也就是说,如果我们把“技”作为一个停止词,那么就可以得到“科技”和“有限公司”。

ik插件的配置在  $root/es/plugins/analysis-ik/config/的 IKAnalyzer.cfg.xml 中,

技术分享图片

 

我们只需要将“技”添加到custom/ext_stopword.dic这个词表文件中,然后重启ES,就能切出来了。

test:

我把“有”也加到了停止词里:ik_smart得到的结论是:并没有任何变化;

我又把“有”从停止词中去除了,放进了“限”去,ik_smart得到的结论是:依然没变化,这时候得去别的词表看看了,是那边给到干扰了。

elasticsearch中切词插件-ik

原文:https://www.cnblogs.com/liuyong18/p/12158470.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!