准备工作: 在 CentOs7 使用 Docker 安装 ElasticSearch 7.4.2
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(自定义分词器)。
2. 分词器安装
进入 docker 中的 elasticsearch(简称 es) 与本地 linux elasticsearch 挂载的 plugins 目录,或者直接进入 docker 中 es 中的 plugins 目录:
1
2
3
4
5# 获取 elasticsearch 的容器id
docker ps
# 进入 docker 中 es 目录中
docker exec -it 容器id /bin/bash
cd plugins下载分词器,并解压到 plugins/ik/ 目录下:
1
2
3
4
5
6# 下载分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
# 解压到指定目录
unzip elasticsearch-analysis-ik-7.4.2.zip -d ./ik
# 删除压缩包
rm elasticsearch-analysis-ik-7.4.2.zip授予全部权限:
1
chmod -R 777 ./ik
查看分词器是否安装成功:
1
2
3
4
5
6# 进入 docker 容器
docker exec -it elasticsearch /bin/bash
# 进入 bin 目录
cd bin
# 执行如下命令,若显示 ik 则表示分词器安装成功
elasticsearch-plugin list
3. 测试分词器
首先进入 kibana 开发工具页面(IP 为 kibana 自己的服务器 地址):http://192.168.160.129:5601/app/kibana#/dev_tools/console?_g=()
使用默认分词器:
1
2
3
4POST _analyze
{
"text": "我是中国人"
}使用中文分词器(ik_smart):
1
2
3
4
5POST _analyze
{
"analyzer": "ik_smart",
"text": "我是中国人"
}使用中文分词器(ik_max_word):
1
2
3
4
5POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
4. 自定义词库
下面我们通过 nginx 来获取静态自定义词库资源,然后将自定义词库资源路径配置在 elasticsearch 指定配置文件中。
1)创建 /mydata/nginx 文件夹,存放 nginx 数据等信息
1 | mkdir /mydata/nginx |
2)创建 docker nginx 实例,复制配置信息:
1 | cd /mydata |
3)停止并删除 nginx 实例:
1 | docker stop nginx |
4)移动拷贝操作:
1 | # 更改 nginx 名称 |
5)运行 nginx 实例:
1 | cd /mydata/nginx |
6)验证 nginx 是否安装成功:
访问 https://nginx服务器IP:80
,若出现如下页面则说明 nginx 安装成功
7)在 nginx 的 html 目录下创建分词文件,比如创建 /mydata/nginx/html/es/fenci/myword.txt 文件,并输入自定义分词数据
8)修改 /usr/share/elasticsearch/plugins/ik/config/ 中的 IKAnalyzer.cfg.xml,具体如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
9)重新启动 nginx 和 elasticsearch
1 | docker restart nginx |
10)在 kibana 验证分词效果