文章目录

  • ElasticSearch - 分词器介绍及中文分词器es-ik安装
  • 1.分词器介绍及和使用
  • 1.1 什么是倒排索引?
  • 1.2 什么是分词器?
  • 1.3 常用的内置分词器
  • 2.中文分词器es-ik的安装和使用
  • 3.设置默认分词器


ElasticSearch - 分词器介绍及中文分词器es-ik安装

1.分词器介绍及和使用

1.1 什么是倒排索引?

 在了解分词器之前我们可以先了解一下ElasticSearch中的倒排索引结构,在这篇博客什么是倒排索引?中对倒排索引进行了比较详细的介绍,大家可以学习了解一下。

1.2 什么是分词器?

 分词器的作用是把一段文本中的词按照一定规则和逻辑进行切分。对词条进行标准化,不同的情景需要使用不同的分词器,不同分词器分词的规则也是不同的。

 在创建索引时会用到分词器,在搜索时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不出结果。它主要包括三部分:

  1. character filter:分词之前的预处理,过滤掉HTML标签、特殊符号转换等。
  2. tokenizer:分词
  3. token filter:标准化

1.3 常用的内置分词器

 ElasticSearch中有一些内置分词器:

  1. standard analyzer:标准分词器,会将词汇单元转成小写并去除停用词和标点符号,支持中文采用的方法为单字切分。未指定分词器的情况下默认使用标准分词器。

    这里停用词这个概念特别介绍一下,有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响。英文的话类似于athe等,是否启用的话是需要在配置文件里面配置的。

    这里给大家一个参考【英文停用词】【中文停用词】


    这里可以看到通过standard分析之后和我们上面所说的一样。字母全部转为小写并且根据单词拆分、中文单字拆分、过滤标点符号。
  1. simple analyzer:通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分词器会去除掉数字类型的字符。
  1. whitespace analyzer:仅仅是根据空格拆分,对字符没有小写化,不支持中文;并且不对生成的词汇单元进行其他标准化处理。
  1. language analyzer:特定语言的分词器,例如:english、german、french等。不支持中文。
  1. stop analyzer:和simple分词器类似,对词汇进行小写处理,开启删除停用词的支持,默认支持删除英文停用词。
  1. pattern analyzer:正则表达式分词,默认为\W+,即通过非字符切割。
  1. customer analyzer:自定义分词器,可以通过一些我们自定义的规则进行分词逻辑。

2.中文分词器es-ik的安装和使用

ES自带tokenizer怎么设置成中文分词_ElasticSearch


 我们可以看到,ES默认使用的标准分词器在处理中文的时候会把中文单词切分成一个一个的汉字。在很多时候其实效果并不符合我们预期,尤其在我们使用中文文本切分之后本该为一个词语却成了单个的汉字。



 针对这种场景很多开发者都开发了一些工具插件,包括

smartCN

等优秀的中文分词器,不过这里我们选择效果更佳专门为中文而生的中文分词器

es-ik



 es-ik的下载方式主要有两种,第一种是ES从5.5版本之后可以通过

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip

下载

es-ik

插件。



 我们这里是通过手动去

github

->

elasticsearch-analysis-ik

上下载对应的zip包,然后放至

elasticsearch/plugins/ik

目录下,这里ik目录是我们自己手动创建的。由于下载的是zip包,所以我们需要通过

unzip

命令解压缩。

yum install -y unzip //若未安装unzip命令需要先安装unzip elasticsearch-analysis-ik-7.8.0.zip

 需要注意的是es-ik的版本选择需要根据对应的ElasticSearch版本去对应,这个大家可以参考es-ik在github上的介绍来下载。简单几步之后我们再去重新启动ElasticSearch,出现以下加载日志则成功安装es-ik中文分词器。


ES自带tokenizer怎么设置成中文分词_分词器_02


 这里安装好之后我们指定一下使用

ik_max_word

分词器进行分析。可以看到比起上面的话分词效果更好。


ES自带tokenizer怎么设置成中文分词_analyzer_03


 但其实IK分词器并不是仅仅根据简单的词汇进行分词,那这样的话也只是类似于英文分词时的

standard

了,既然强大那当然不能仅仅如此。这里我们换一个文本试试。


ES自带tokenizer怎么设置成中文分词_analyzer_04


ES自带tokenizer怎么设置成中文分词_ElasticSearch_05


 看到这样的效果大家是不是能感受到IK分词器的强大了呢,动手搞起来就完了。



 另外IK其实自带两个分词器的:一个是我们上面使用的

ik_max_word

,这种模式会将文本做最细粒度的拆分,尽可能多的拆分出词语,相比大家也感受到了;另一个就是

ik_smart

,这种的话拆分会更粗粒度,已经被分出来的词语不会再被其他分词占用。

3.设置默认分词器

 默认情况下会使用standard分词器,如果我们需要设置其他的分词器时可以在新建索引的时候加上如下配置。

ES自带tokenizer怎么设置成中文分词_analyzer_06


 设置成功后我们也可通过

_setting

进行查看。


ES自带tokenizer怎么设置成中文分词_analyzer_07