文章目录
- 一,122-全文检索-ElasticSearch-分词-分词&安装ik分词
- 二,124-全文检索-ElasticSearch-分词-自定义扩展词库
-
- 1,创建nginx容器
-
- [1.1 创建nginx文件夹](#1.1 创建nginx文件夹)
- [1.2 创建nginx容器获取nginx配置](#1.2 创建nginx容器获取nginx配置)
- [1.3 复制nginx容器配置文件](#1.3 复制nginx容器配置文件)
- [1.4 删除临时的nginx容器](#1.4 删除临时的nginx容器)
- [1.5 创建新的nginx容器](#1.5 创建新的nginx容器)
- 2,配置扩展词库
-
- [2.1 elasticsearch配置扩展词库](#2.1 elasticsearch配置扩展词库)
- [2.2 nginx新建词库文件](#2.2 nginx新建词库文件)
- [2.3 重启容器](#2.3 重启容器)
- 3,测试扩展词库效果
一,122-全文检索-ElasticSearch-分词-分词&安装ik分词
Elasticsearch 使用的中文分词器IK Analyzer
(简称IK
)是一个非常流行的中文分词器插件。
-
安装IK分词器插件:
首先,需要下载与你的 Elasticsearch 版本相匹配的
IK
分词器插件。进入elasticsearch的docker容器:
dartdocker exec -it elasticsearch /bin/bash
执行命令安装:
dartbin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.13.0
查看安装结果:
dartbin/elasticsearch-plugin list
-
重启Elasticsearch :
安装插件后,需要重启 Elasticsearch 服务以使插件生效。
shdocker restart elasticsearch
-
测试IK分词器:
为了对比效果,先使用标准的standard分词器,这个分词器是针对英文的。
dart
POST _analyze
{
"analyzer": "standard",
"text": "尚硅谷谷粒商城"
}
对于中文,standard分词器的效果非常不理想,其把中文拆分为单个汉字。
使用中文ik分词器。
dart
POST _analyze
{
"analyzer": "ik_smart",
"text": "尚硅谷谷粒商城"
}
结果如下,处理中文时,IK分词器比standard要强大的多。
当然,这个分词器也有改进的空间,比方说,上面例子中,分词器不能正确的把尚硅谷
识别为一个词,这就需要配合专门的词库来进行优化了。
二,124-全文检索-ElasticSearch-分词-自定义扩展词库
1,创建nginx容器
因为我们要把词库放在nginx作为elasticsearch的扩展词库,所以首先要安装nginx。
1.1 创建nginx文件夹
在/mydata下创建nginx文件夹。
dart
cd /mydata
mkdir nginx
1.2 创建nginx容器获取nginx配置
注意,这个nginx容器不是最终我们需要的nginx容器,仅仅是为了获取nginx配置文件的模板而创建的。
dart
docker run -p 80:80 --name nginx -d nginx:1.10
执行这个命令时,虽然我们没有提前下载镜像,docker会自动检测,若没有镜像,会先下载镜像。
1.3 复制nginx容器配置文件
复制nginx容器配置文件到前面创建的文件夹/mydata/
下。
dart
docker container cp nginx:/etc/nginx .
之后在nginx目录下,可以看到如下结构。
1.4 删除临时的nginx容器
执行下面命令,先停止nginx容器,后删除容器。
dart
docker stop nginx
docker rm nginx
1.5 创建新的nginx容器
dart
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/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/conf.d:/etc/nginx/conf.d \
-d nginx
2,配置扩展词库
2.1 elasticsearch配置扩展词库
进入elasticsearch容器。
dart
docker exec -it elasticsearch /bin/bash
在/usr/share/elasticsearch/config/analysis-ik
中的 IKAnalyzer.cfg.xml
配置nginx中的扩展词库。
dart
<?xml version="1.0" encoding="UTF-8"?>
<!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.128.130/fenci/myword.txt</entry>
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
2.2 nginx新建词库文件
在nginx的挂载目录html目录下,新建es目录,es目录下,新建fenci.txt
文件,文件中输入词语:
dart
尚硅谷
乔碧萝
2.3 重启容器
重启elasticsearch容器和nginx容器。
dart
docker restart elasticsearch
docker restart nginx
3,测试扩展词库效果
dart
POST _analyze
{
"analyzer": "ik_max_word",
"text": "尚硅谷谷粒商城"
}
结果显示,IK分词器能基于扩展词库,将尚硅谷识别为一个词。