当前位置: > > > Elasticsearch - 中文分词器的集成与使用教程1(IK分词器的安装与使用)

Elasticsearch - 中文分词器的集成与使用教程1(IK分词器的安装与使用)

    Elasticsearch 在创建索引和查询索引时都需要进行分词,分词需要用到分词器。分词器的作用是:把一段文本中的文本按照一定规则切分成词语。本文将演示如何在在 Elasticsearch 中集成 IK 这个中文分词器。

一、基本介绍

1,分词器介绍

(1)分词器底层对应的是 Analyzer 类,它是一个抽象类。切分词的具体规则是由其子类实现的,即不同的分词器分词的规则是不同的。所以,对于不同的语言,要使用不同的分词器。
(2)在创建索引时会用到分词器,在查询索引时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不到结果。

2,分词器的工作流程

(1)切分关键词(把关键的、核心的词语切出来)。
(2)去除停用词。
(3)对于英文词语,把所有字母转为小写(搜索时不区分大小写)。

3,中文分词器

(1)在中文数据检素场景中,为了提供更好的检索效果,需要在 Elasticsearch 中集成中文分词器。因为 Elasticsearch 默认是按照英文的分词规则进行分词的,所以中文分词效果不理想。
(2)在中文分词领域,IK 分词器是不可撼动的,所以这里在 Elasticsearch 中集成 IK 这个中文分词器。

二、IK 分词器的安装

注意:在 Elasticscarch 中安装 elasticsearch-analysis-ik 插件时,需要在 Elasticsearch 集群的所有节点中都安装。


1,下载 IK 插件包

(1)我们访问 http://elasticsearch-analysis-ik/GitHub 主页(点击访问),根据 Elasticsearch 的版本选择对应的插件包下载:
wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-7.17.26.zip

(2)将下载好的 IK 插件包移动到 Elasticsearch 目录下:
mv elasticsearch-analysis-ik-7.17.26.zip /usr/local/elasticsearch/

2,安装 IK 插件

(1)进入 Elasticsearch 目录,执行如下命令离线安装 elasticsearch-analysis-ik 插件:
bin/elasticsearch-plugin install file:///usr/local/elasticsearch/elasticsearch-analysis-ik-7.17.26.zip

(2)在安装的过程中会有警告信息提示,需要输入 y 确认继续向下执行:

(3)如果看到以下内容,则表示安装成功了。

3,查看安装结果

(1)在插件安装成功后,在 Elasticsearch 目录下的 configplugins 目录下会产生一个 analysis-ik 目录。
(2)config 目录下的 analysis-ik 中存储的是 elasticsearch-analysis-ik 插件的配置文件信息:
ll config/analysis-ik

(3)plugins 目录下的 analysis-ik 中存储的是 elasticsearch-analysis-ik 插件的核心 Jar 包:
ll plugins/analysis-ik

4,停止集群

如果集群正在运行,则需要停止集群(将所有节点的 Elasticsearch 进程停止):
jps
kill 进程号

5,修改目录权限

    我们需要修改 Elasticsearchplugins 目录下 analysis-ik 子目录的权限。为了方便操作,我们可以直接修改 Elasticsearch 父目录的权限即可。
chmod -R 777 /usr/local/elasticsearch

6,重新启动集群 

(1)三台服务器都切换到 es 用户:
su es

(2)然后各服务器分别进入 elasticsearch 目录后执行如下命令即可启动服务:
./bin/elasticsearch

(3)我们也可以使用后台运行的方式启动服务:
nohup ./bin/elasticsearch 2>&1 &

三、IK 分词器的使用

1,默认分词器效果

(1)下面命令使用默认分词器测试中文分词效果:
curl -XPOST "http://node1:9200/emp/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text":"我们是中国人"}'

(2)返回结果如下,可以看到默认分词器对于中文的分词并不理想,每个字都分成一个词:

2,IK 分词器效果

(1)下面命令使用 IK 分词器测试中文分词效果:
ik_max_wordik_smart 区别:
  • ik_max_word 会将文本做最细粒度的拆分。
  • ik_smart 会做最粗粒度的拆分。
curl -XPOST "http://node1:9200/emp/_analyze?pretty" -H 'Content-Type: application/json' -d '{"text":"我们是中国人","tokenizer":"ik_max_word"}'

(2)返回的结果如下:
评论0