这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战
对于标题我没有夸大哈,能成功的,每一步也有代码和图相结合的 最近在弄这个
Elasticsearch
,技术发展所要求,现在还有什么我不需要去学吗?麻了麻了。沉下去,再浮上来
,我想我们会变的不一样的。😁
关于封面:好看的人拍的好看的图
作者:笨小孩.
一、Docker安装Elasticsearch
1.1、拉取Elasticsearch镜像
docker pull elasticsearch:7.7.0
查看镜像命令:docker images
删除镜像命令:docker rmi <镜像名:版本号>
or docker rmi <镜像id>
1.2、启动前准备
创建存放数据及配置文件的文件夹,启动时挂载。
mkdir -p /home/elasticsearch/data/ mkdir -p /home/elasticsearch/config/
解释:
- -p: 参数来创建多级文件夹
- tree:以树形结构展示文件目录
编写配置文件
echo 'http.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
解释:
echo >>
:是利用了Shell编程语法,使用echo >>指令向文件追加内容,原内容将保存
- 使用 > 指令的话就是覆盖文件原内容并重新输入内容,若文件不存在则创建文件。
cat
:展示文件内容。http.cors.enabled: true
和http.cors.allow-origin: "*"
配置是为了解决跨域问题,因为等下还要下载可视化工具查看。
修改文件夹权限
chmod -R 777 /home/elasticsearch/ ls -l # 查看文件权限
1.3、启动elasticseach镜像
docker run --name elasticsearch -p 9200:9200 \ -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \ -v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /home/elasticsearch/data:/usr/share/elasticsearch/data \ -v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.7.0
参数解释:
--name elasticsearch:将容器命名为 elasticsearch -p 9200:9200:将容器的9200端口映射到宿主机9200端口 -p 9300:9300:将容器的9300端口映射到宿主机9300端口,目的是集群互相通信 -e "discovery.type=single-node":单例模式 -e ES_JAVA_OPTS="-Xms64m -Xmx128m":配置内存大小 -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将配置文件挂载到宿主机 -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data:将数据文件夹挂载到宿主机 -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins:将插件目录挂载到宿主机(需重启) -d elasticsearch:7.7.0:后台运行容器,并返回容器ID
运行结果:
查看是否启动成功:
接下来我们就是拿浏览器访问啦。
在浏览器上输入:服务器IP地址:9200
1.4、可能出现的问题
- 启动成功,但是访问失败的话,查看一下安全组中映射端口是否已经打开。如果是本地虚拟机,可能与防火墙相关(我用的云服务器,没有测试,如果有问题,还是需要大家自行去百度||谷歌一下)。
-e ES_JAVA_OPTS="-Xms64m -Xmx128m"
:配置内存大小出现了问题。(可试着调一下,docker
玩不坏的,莫慌)- 最后就还有可能是配置文件中出现了问题。
echo 'http.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
http.host: 0.0.0.0
在冒号后面有一个空格的,这里的配置文件是yml
格式,所以一定要严格按照yml
格式来书写。
二、为Elasticsearch安装ik分词器
2.1、什么是IK分词器?
分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱技术"会被分为"我","爱","技","术"。
结果:
{ "tokens": [ { "token": "我", "start_offset": 0, "end_offset": 1, "type": "<IDEOGRAPHIC>", "position": 0 }, { "token": "爱", "start_offset": 1, "end_offset": 2, "type": "<IDEOGRAPHIC>", "position": 1 }, { "token": "技", "start_offset": 2, "end_offset": 3, "type": "<IDEOGRAPHIC>", "position": 2 }, { "token": "术", "start_offset": 3, "end_offset": 4, "type": "<IDEOGRAPHIC>", "position": 3 } ] }
这显然不符合要求,所以我们需要安装中文分词器IK来解决这个问题
IK提供了两个分词算法:ik_smart
和ik_max_word
其中ik_smart
为最少切分,ik_max_word
为最细粒度划分
2.2、安装ik分词器
进入已经启动成功的elasticsearch
容器。
docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip
下载过程中会出现这个问题,直接输入 y
回车就可以了。
下载完成之后,退出去,重新启动elasticsearch
容器。
docker restart <容器名o容器id> # 重启容器命令
2.3、测试IK分词器是否安装成功
安装完成后,我们再来进行测试遍,看看有什么样的变化。
postman post请求分词测试:http://服务器IP地址:9200/_analyze
{ "tokenizer":"ik_smart",// 分词器不同,这个地方也会有变化 具体的可能还需要去学习。 "text":"我爱技术" }
结果:
{ "tokens": [ { "token": "我", "start_offset": 0, "end_offset": 1, "type": "CN_CHAR", "position": 0 }, { "token": "爱", "start_offset": 1, "end_offset": 2, "type": "CN_CHAR", "position": 1 }, { "token": "技术", "start_offset": 2, "end_offset": 4, "type": "CN_WORD", "position": 2 } ] }
三、安装Elasticsearch可视化工具 | mobz/elasticsearch-head:5
Elasticsearch
可视化工具有多种,可以根据自己的喜好进行选择,我这里使用的是 mobz/elasticsearch-head:5
而已。
3.1、拉取镜像
docker pull mobz/elasticsearch-head:5
3.2、启动镜像
docker run -d --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
3.3、测试
我们在浏览器访问:http://服务器IP:9100/
3.4、可能出现的问题
elasticsearch
配置文件elasticsearch.yml
中 缺少了下列跨域配置。
http.cors.enabled: true http.cors.allow-origin: "*"
🌈自言自语
下一篇写如何搭建elasticsearch
集群,咱们一步一步来哈😁。
你好,我是博主宁在春
,Java学习路上的一颗小小的种子,也希望有一天能扎根长成苍天大树。
最近在持续更新中,如果你觉得文章对你有所帮助,也感兴趣的话,关注我吧。
让我们一起学习,一起讨论吧。
希望与君共勉
😁
我们:待别时相见时,都已有所成。