4. Elasticsearch分词、Docker 安装 Nginx

本文介绍了Elasticsearch的分词原理和内置分词器,重点讲解了如何安装和使用IK分词器进行中文分词。通过示例展示了IK分词器的smart和max_word模式,并演示了如何自定义扩展词库。此外,还提到了Docker环境下安装Nginx作为远程分词服务的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/analysis.html

一个tokenizer(分词器)接收一个字符流,将之分割为独立的tokens(词元,通常是独立的单词),然后输出tokens流。

例如:whitespace tokenizer遇到空白字符时分割文本。它会将文本“Quick brown fox!”分割为[Quick,brown,fox!]。

该tokenizer(分词器)还负责记录各个terms(词条)的顺序或position位置(用于phrase短语和word proximity词近邻查询),以及term(词条)所代表的原始word(单词)的start(起始)和end(结束)的character offsets(字符串偏移量)(用于高亮显示搜索的内容)。

elasticsearch提供了很多内置的分词器,可以用来构建custom analyzers(自定义分词器)。

POST _analyze
{
  "analyzer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

默认的分词器一般都是针对于英文,对于中文我们需要安装额外的分词器来进行分词。

安装IK分词器

事前准备:

IK 分词器属于 Elasticsearch 的插件,所以 IK 分词器的安装目录是 Elasticsearch 的 plugins 目录,在我们使用Docker启动 Elasticsearch 时,已经将该目录挂载到主机的 /mydata/elasticsearch/plugins 目录。

IK 分词器的版本需要跟 Elasticsearch 的版本对应,当前选择的版本为 7.4.2,下载地址为:Github Release 或访问:镜像地址

1. 下载

# 进入挂载的插件目录 /mydata/elasticsearch/plugins
cd /mydata/elasticsearch/plugins

# 安装 wget 下载工具(已安装,则跳过)
 yum install -y wget

# 下载对应版本的 IK 分词器(这里是7.4.2)
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip

这里已经在挂载的 plugins 目录安装好了 IK分词器。现在我们进入到 es 容器内部检查是否成功安装

# 进入容器内部
docker exec -it elasticsearch /bin/bash

# 查看 es 插件目录
ls /usr/share/elasticsearch/plugins

# 可以看到 elasticsearch-analysis-ik-7.4.2.zip

所以我们之后只需要在挂载的目录/mydata/elasticsearch/plugins下进行操作即可。

2. 解压

# 进入到 es 的插件目录
cd /mydata/elasticsearch/plugins

# 解压到 plugins 目录下的 ik 目录
unzip elasticsearch-analysis-ik-7.4.2.zip -d ik

# 删除下载的压缩包
rm -f elasticsearch-analysis-ik-7.4.2.zip 

# 修改文件夹访问权限
chmod -R 777 ik/

3. 查看安装的ik插件

# 进入 es 容器内部
docker exec -it elasticsearch /bin/bash

# 进入 es bin 目录
cd /usr/share/elasticsearch/bin

# 执行查看命令  显示 ik
elasticsearch-plugin list

# 退出容器
exit

# 重启 Elasticsearch
docker restart elasticsearch

4. 测试 ik 分词器

智能分词

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "我是中国人"
}

在这里插入图片描述

最大分词

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "我是中国人"
}

在这里插入图片描述

自定义扩展分词库

对于一些比较新的词汇,ik分词器并不支持,所以我们需要自定义词库

我们在 nginx 中自定义分词文件,通过配置 es 的 ik 配置文件来远程调用 nginx 中的分词文件来实现自定义扩展词库。

注:默认 nginx 请求的是 数据目录的 html 静态目录

nginx 安装参考:docker 安装 nginx

1. nginx 中自定义分词文件

echo "尚硅谷" > /mydata/nginx/html/fenci.txt

nginx 默认请求地址为 ip:port/fenci.txt

如果想要增加新的词语,只需要在该文件追加新的行并保存新的词语即可。

2. 给 es 配置自定义词库

# 1. 打开并编辑 ik 插件配置文件
vim /mydata/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml

把这行的注释打开,里面配置上自己的分词字典

在这里插入图片描述

3. 重启 elasticsearch 容器

docker restart elasticsearch

4. 测试自定义词库

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "尚硅谷"
}

结果:

在这里插入图片描述

Docker 安装 Nginx

这里介绍如何使用 docker 安装 nginx,首先我们先启动一个临时的 nginx,将它的配置拷贝到我们将要挂载的本机 nginx 配置目录中,之后再创建一个新的我们要用的 nginx 容器。

1. 创建配置目录

mkdir -p /mydata/nginx

2. 启动临时nginx容器

docker run -p 80:80 --name nginx -d nginx:1.10

3. 拷贝出 Nginx 容器的配置

# 进入挂载的nginx目录
cd /mydata/nginx

# 将容器内的配置文件拷贝到nginx目录下,注意命令末尾有个点
# 改完之后的结构是这样的:/mydata/nginx/nginx/...等文件
docker container cp nginx:/etc/nginx .

# 将复制过来的这个nginx文件夹改名为conf
# 最终效果:/mydata/nginx/conf/...等文件
mv nginx conf

4. 删除临时nginx容器

# 停止运行 nginx 容器
docker stop nginx

# 删除 nginx 容器
docker rm nginx

5. 启动 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

6. 设置 nginx 随 Docker 启动

docker update nginx --restart=always

7. 测试 nginx

echo '<h1><a target="_blank" href="https://gitee.com/UnityAlvin/gulimall">gulimall</a></h1>' \
>/mydata/nginx/html/index.html

访问:你的虚拟机ip 可以看到下面内容说明安装成功

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值