1. 概述

        一个tokenizer(分词器)接收一个字符流,将之分割为独立的tokens(词元,通常是独立的单词),然后输出tokens流。例如,whitespace tokenizer遇到空白字符时分割文本,它会将文本“Quick brown fox!”分割为【Quick,brown,fox!】。
        该tokenizer(分词器)还负责记录各个term(词条)的顺序或者position位置(用于phrase短语和Word proximity词近邻查询),以及term(词条)所代表的原始word(单词)的start(起始)和end(结束)的character offsets(字符偏移量)(用于高亮显示搜索的内容)。ElasticSearch提供了很多内置的分词器,可以用来构建custom analyzers(自定义分词器)。

ES提供的分词器可以在官方文档中找到,如图:

es8添加文档时怎么设置不分词 es如何分词_分词器

默认的是标准分词器 。点击Standard标准分词器,里面有如图所示的例子

es8添加文档时怎么设置不分词 es如何分词_elasticsearch_02

可以看到标准分词器是按照空格或者字符进行分词的,如果是全中文的,就会按照汉子进行分词,所以,默认的分词器往往不符合我们的实际需求。而且,ES默认提供的分词器都对英文支持良好,对中文都是不大友好的,对于中文我们需要安装单独的中文分词器,使用较多的是开源的IK分词器。

IK分词器GitHub地址:https://github.com/medcl/elasticsearch-analysis-ik

2. 安装IK分词器

 2.1 准备工作

1)明确ES版本

2)进入IK分词器的GitHub,找到ES对应的版本

es8添加文档时怎么设置不分词 es如何分词_docker_03

2.2 安装

2.2.1 进入ES的安装目录的plugins目录

1)以交互模式进入es的控制台

docker exec -it ae76972f47b5 /bin/bash

参数解释:

-it:表示以交互模式

ae76972f47b5 :es的容器id

/bin/bash:表示控制台

如图:

es8添加文档时怎么设置不分词 es如何分词_分词器_04

2)进入plugins目录

cd plugins/

es8添加文档时怎么设置不分词 es如何分词_docker_05

2.2.2 下载IK分词器

1)复制ik分词器的下载地址

es8添加文档时怎么设置不分词 es如何分词_docker_06

2)将ik下载到plugins目录

使用wget下载命令

es8添加文档时怎么设置不分词 es如何分词_docker_07

发现wget不存在,这是因为虚拟机安装的是纯净版,没有wget,解决方案

2.1. 安装wget

2.2 进入物理映射目录

因为es是docker安装的,且配置了目录映射地址,因此,可以不用进入容器,直接在对应的映射地址进行操作即可

操作步骤:

1)退出容器(exit)

es8添加文档时怎么设置不分词 es如何分词_docker_08

2)进入映射目录

cd /mydata/elasticsearch/plugins/

es8添加文档时怎么设置不分词 es如何分词_分词器_09

3)安装wget

yum install wget

如图:

es8添加文档时怎么设置不分词 es如何分词_分词器_10

4)使用wget下载ik

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

es8添加文档时怎么设置不分词 es如何分词_elasticsearch_11

查看

 

es8添加文档时怎么设置不分词 es如何分词_elasticsearch_12

注意:

1)我们也可以使用一些客户端将文件上传到Linux主机上,比如XShell工具

2)使用XShell需要设置虚拟机允许用户名密码登录(因为用vagrant安装的,默认用户名密码登录没开启)

Vagrant进入系统之后

su
vi /etc/ssh/sshd_conf
修改 PasswordAuthentication yes
重启服务:service sshd restart

如图:

es8添加文档时怎么设置不分词 es如何分词_es8添加文档时怎么设置不分词_13

3)连接XShell 

2.2.3 解压文件

unzip elasticsearch-analysis-ik-7.4.2.zip

es8添加文档时怎么设置不分词 es如何分词_分词器_14

注意:

1)如果unzip没安装,使用 yum install unzip安装即可

2)删除源文件 elasticsearch-analysis-ik-7.4.2.zip

3)新建ik目录,将解压的文件都移动到ik目录下(可以不做,为了好看)

2.2.4 检查安装是否成功

1)进入es容器内部

docker ps
docker exec -it ae76972f47b5  /bin/bash
cd bin

es8添加文档时怎么设置不分词 es如何分词_docker_15

2)运行插件命令

elasticsearch-plugin -h

按回车,可以看到一个list参数

elasticsearch-plugin list

es8添加文档时怎么设置不分词 es如何分词_elasticsearch_16

可以看到一个ik,说明我们把ik分词器安装好了。

2.2.4 重启ElasticSearch

1)退出容器:exit

2)重启:docker restart elasticsearch

es8添加文档时怎么设置不分词 es如何分词_es8添加文档时怎么设置不分词_17

3. 测试

3.1 没用ik分词器之前

POST _analyze
{
  "analyzer": "standard",
  "text":"我爱我家"
}

es8添加文档时怎么设置不分词 es如何分词_es8添加文档时怎么设置不分词_18

3.2 使用ik分词器

POST _analyze
{
  "analyzer": "ik_smart",
  "text":"我爱我家"
}

es8添加文档时怎么设置不分词 es如何分词_docker_19

4. ik常用的两种分词器

4.1 ik_smart(智能分词)

es8添加文档时怎么设置不分词 es如何分词_分词器_20

4.2 ik_max_word

es8添加文档时怎么设置不分词 es如何分词_elasticsearch_21