#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词

一、什么是分词

平常我们在使用百度或者谷歌进行搜索的时候,通常输入的不是某个准确的词或者单个字,而是一个短语或是一句话。比如我在百度中搜索:“如何评价ElasticSearch”:

可以看到,搜索引擎并不是去检索完全匹配“如何评价ElasticSearch”或者简单的模糊查询,而是将短语拆分成了“ElasticSearch”、“评价”等词语,然后根据一定的规则将相关度比较高的结果显示出来。

因此,分词也是我们进行全文检索的关键。

二、ik分词器

es提供的默认中文分词会将所有的中文字拆分成一个个单字,就像这样:

 

这并不是我们想要的结果,所以我们需要借助ik分词器对短语进行分词。

ik分词器这个插件的具体安装在我的上一篇博客中可以找到:博客链接,这里就不再赘述了。

ik分词器提供了两种分词算法,分别是ik_smart(智能分词、最粗粒度分词)和ik_max_word(最细粒度分词)。

在kibana上分别对两种算法进行测试:

1、ik_smart:

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "我爱中华民族"
}

2、ik_max_word:

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "我爱中华民族"
}

可以看到,在ik_smart下,“中华民族”会作为一个完整的词语,而在ik_max_word下,“中华民族”会被切分成“中华”、“民族”等更细粒度的词语。

因此我们在索引时用ik_max_word,在搜索时用ik_smart,这个在以后的实战检索时,会做更详细的解释。

*自定义分词词典

ik分词器实现分词主要依赖于其config目录下的字典,ik会根据字典中所包含的词语对输入的文本进行分词,因此如果出现了在字典中所没有的词语,那么就会出现如下的情况:

哔哩哔哩是某视频网站的名称,由于在分词器的字典中并不包含“哔哩哔哩”这个词语,因此即使在智能分词,也就是最粗粒度分词的情况下,它也被分成了4个单字。如果想解决这个问题,就需要我们自己将词语放到字典中:

进入到ik的config目录下,可以看到许多以.dic结尾的文件,这些文件就是ik分词器默认的字典:

打开某个字典,可以看到每行都是一个独立的词语,我们之前输入的“中华民族”也赫然在列:

我们可以仿照这种配置方法,新建自定义的字典,将词语放进去:

然后我们需要在IKAnalyzer.cfg.xml文件中,引入我们的字典:

保存之后,我们需要把es和kibana都重启一下,重启es时,我们可以在控制台看到我们的my.dic被加载了:

重启完成之后,在kibana上测试一下,现在,哔哩哔哩就被当作了一个完整的词语了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值