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

一、什么是分词

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第1张图片

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

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

二、ik分词器

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

 

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

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

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

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

1、ik_smart:

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第2张图片

2、ik_max_word:

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第3张图片

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

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

*自定义分词词典

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第4张图片

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

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第5张图片

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第6张图片

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第7张图片

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第8张图片

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

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

#ElasticSearch笔记#利用ElasticSearch实现全文搜索(二)利用ik分词器实现中文分词_第9张图片

你可能感兴趣的:(ElasticSearch笔记,ik分词器,elasticsearch,搜索引擎)