准备工作
Docker安装Elasticsearch
1.设置max_map_count不能启动es会启动不起来
不设置启动会提示:
max virtual memory areas vm.max_map_count [65530] is too low, increase
to at least [262144]
问题翻译过来就是:elasticsearch用户拥有的内存权限太小,至少需要262144;
- 查看max_map_count的值 默认是65530
cat /proc/sys/vm/max_map_count
- 重新设置max_map_count的值
sysctl -w vm.max_map_count=262144
2.下载镜像并运行
- 拉取镜像
#拉取镜像
docker pull elasticsearch:7.8.0
- 启动镜像
#启动镜像
docker run --name elasticsearch -d -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.8.0
参数说明
--name表示镜像启动后的容器名称
-d: 后台运行容器,并返回容器ID;
-e: 指定容器内的环境变量
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
9200是后端发送请求restAPI使用的
9300是es在分布式集群下节点间的通信端口
3.浏览器访问ip:9200 出现以下界面就是安装成功
4.安装elasticsearch-head
elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。elasticsearch-head 插件的安装在 Linux 和 Windows 没什么区别,安装之前确保当前系统已经安装 nodejs 即可。
- 拉取镜像
docker pull mobz/elasticsearch-head:5
- 创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
- 启动容器
docker start elasticsearch-head
or
docker start 容器id #docker ps -a 可以查看容器id
5.浏览器访问: http://ip:9100 出现以下界面就是安装成功
尝试连接easticsearch会发现无法连接上(如下图)
由于是前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置。
解决办法
6.修改docker中elasticsearch的elasticsearch.yml文件
- 进入elasticsearch容器
docker exec -it elasticsearch /bin/bash (进不去使用容器id进入)
- 编辑文件
vi config/elasticsearch.yml
- 在最下面添加2行
http.cors.enabled: true
http.cors.allow-origin: "*"
- 退出并重启服务
exit
docker restart 容器id
7.ElasticSearch-head 操作时不修改配置,默认会报 406错误码
- 复制vendor.js到外部
docker cp 容器id:/usr/src/app/_site/vendor.js /usr/local/
- 修改vendor.js共有两处
1.6886行
contentType: "application/x-www-form-urlencoded"
改成
contentType: "application/json;charset=UTF-8"
2.7573行
var inspectData = s.contentType === "application/x-www-form-urlencoded"
改成
var inspectData = s.contentType === "application/json;charset=UTF-8" &&
- 修改完成在复制回容器
docker cp /usr/local/vendor.js 容器id:/usr/src/app/_site
- 重启elasticsearch-head
docker restart 容器id
- 最好就可以查询到es数据了
8.安装ik分词器
前言:
es本身也自带分词器,但是大多仅对英文比较友好,对于中文一般来说都是一个字一个词,不能实现我们想要的多字词分词,例如”北京天安门“,分词之后是“北”,“京”,“天”,“安”,“门“,所以我们需要手动安装”ik分词器,这款分词器相对于来说对中文分词是比较有好的“,下面进入步骤
这里采用离线安装:
下载分词器压缩包
各版本下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
ik分词器版本要和elasticsearch版本保持一致例如我用的是7.8.0
elasticsearch-analysis-ik-7.8.0 下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip
#1. 将压缩包移动到容器中
docker cp /tmp/elasticsearch-analysis-ik-7.8.0.zip 容器id:/usr/share/elasticsearch/plugins
#2. 进入容器
docker exec -it elasticsearch /bin/bash
#3. 创建目录
mkdir /usr/share/elasticsearch/plugins/ik
#4. 将文件压缩包移动到ik中
mv /usr/share/elasticsearch/plugins/elasticsearch-analysis-ik-7.8.0.zip /usr/share/elasticsearch/plugins/ik
#5. 进入目录
cd /usr/share/elasticsearch/plugins/ik
#6. 解压
unzip elasticsearch-analysis-ik-7.8.0.zip
#7. 删除压缩包
rm -rf elasticsearch-analysis-ik-7.8.0.zip
退出并重启
9.测试分词效果
http://ip地址:9200/_analyze
{
"analyzer": "ik_max_word",
"text": "北京天安门"
}