- docker pull elasticsearch:7.7.0
-
查看镜像命令:docker images
删除镜像命令:docker rmi <镜像名:版本号>ordocker rmi <镜像id>
创建存放数据及配置文件的文件夹,启动时挂载。
- mkdir -p /home/elasticsearch/data/
- mkdir -p /home/elasticsearch/config/
-
解释:
编写配置文件
- echo 'http.host: 0.0.0.0
- http.cors.enabled: true
- http.cors.allow-origin: "*" '>>/home/elasticsearch/config/elasticsearch.yml
-
解释:
修改文件夹权限
- chmod -R 777 /home/elasticsearch/
- ls -l # 查看文件权限
-
- 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
- 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格式来书写。分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱技术"会被分为"我",“爱”,“技”,“术”。
结果:
- {
- "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为最细粒度划分
进入已经启动成功的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 elasticsearch # <容器名o容器id> 重启容器命令
-
安装完成后,我们再来进行测试遍,看看有什么样的变化。
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而已。
- docker pull mobz/elasticsearch-head:5
-
- docker run -d --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
-
我们在浏览器访问:http://服务器IP:9100/
elasticsearch配置文件elasticsearch.yml中 缺少了下列跨域配置。
- http.cors.enabled: true
- http.cors.allow-origin: "*"
-