一个 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 (自定义分词器)。
注意:不能用默认 elasticsearch-plugin install xxx.zip 进行自动安装
https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v6.4.2
A、对应es 版本安装进入 es 容器内部 plugins 目录
docker exec -it 容器 id /bin/bash

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
B、unzip 下载的文件
C、rm –rf *.zip
D、mv elasticsearch/ ik

可以确认是否安装好了分词器
cd ../bin
elasticsearch plugin list:即可列出系统的分词器

A、使用默认
POST _analyze
{
"text": "我是中国人"
}
B、请观察结果,使用分词器
POST _analyze
{
"analyzer": "ik_smart", "text": "我是中国人"
}
另外一个分词器
ik_max_word
POST _analyze
{
"analyzer": "ik_max_word", "text": "我是中国人"
}
能够看出不同的分词器,分词有明显的区别,所以以后定义一个索引不能再使用默认的 mapping 了,要手工建立 mapping,因为要选择分词器。
随便启动一个 nginx 实例,只是为了复制出配置
docker run -p 80:80 --name nginx -d nginx:1.10
如果 docker 中没有 nginx 镜像, 会默认先下载

将容器内的配置文件拷贝到当前目录:
docker container cp nginx:/etc/nginx . 别忘了后面的点
修改文件名称:mv nginx conf 把这个 conf 移动到 /mydata/nginx 下
终止原容器:
docker stop nginx
执行命令删除原容器:
docker rm $ContainerId
创建新的 nginx;执行以下命令
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

修改 /usr/share/elasticsearch/plugins/ik/config/中的 IKAnalyzer.cfg.xml
/usr/share/elasticsearch/plugins/ik/config
DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置comment>
<entry key="ext_dict">entry>
<entry key="ext_stopwords">entry>
<entry key="remote_ext_dict">http://192.168.38.130/fenci/myword.txtentry>
properties>
原来的 xml
DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置comment>
<entry key="ext_dict">entry>
<entry key="ext_stopwords">entry>
properties>
注:fenci 文件夹是 mydata/nginx/html 目录下的
更新完成后,es 只会对新增的数据用新词分词。历史数据是不会重新分词的。如果想要历史数据重新分词。需要执行:POST my_index/_update_by_query?conflicts=proceed
