安装ElasticSearch
ElasticSearch以下项目简称(ES),平时所说的ES就是ElasticSearch
此教程是使用docker部署!!!
单点部署ES
创建网络
因为ES还需要部署其它东西所以容器之间需要网络互联,首先创建一个网络。
bash
docker network create es-net
加载镜像
这里的ES是使用7.12.1版本。
-Xms512m
是内存大小,正式环境不建议这么大,因为es还是很消耗内存的,所以尽可能大些。- 考虑到虚拟机等电脑内存所以暂时小点反正也是一个人用!!!
discovery.type=single-node
模式是单点访问
bash
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
--restart=always \
elasticsearch:7.12.1
在浏览器中输入http://192.168.1.4:9200/
但是光这个还不够因为还需要调试工具进行调试等操作,所以还需要安装Dev Tools(kibana)
安装kibana
kibana可以给我们提供一个ES界面,方便学习。
安装
--network es-net
:加入一个名为es-net的网络中,与elasticsearch在同一个网络中-e ELASTICSEARCH_HOSTS=http://es:9200"
:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch-p 5601:5601
:端口映射配置
bash
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
--restart=always \
kibana:7.12.1
访问地址:http://192.168.1.4:5601/。在控制台中发送,会发现和刚刚在浏览器访问:http://192.168.1.4:9200/是一样的结果。
json
# 测试发送
GET /
分词问题演示
在正常使用中会发现,ES的分词对中文支持不是很好,是逐个字分的,这时不希望的,并不会有词语联想。
下面将介绍如何安装IK分词器。
json
# 测试分词问题
POST /_analyze
{
"text": "测试分词问题",
"analyzer": "chinese"
}
安装IK分词器
IK分词器是一个插件,所以安装在插件目录下。
在线安装
进入镜像内部。
bash
# 进入容器内部
docker exec -it elasticsearch bash
在线下载并安装,版本是7.12.1
bash
# 在线下载并安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
安装完成后进行重启ES。
bash
docker restart es
离线安装
查看数据卷目录。
bash
docker volume inspect es-plugins
说明plugins目录被挂载到了:/var/lib/docker/volumes/es-plugins/_data
之后进入到这个目录中,将下载好的zip进行解压重命名为ik,将离线的安装包放入到这个目录中即可。
7.12.1版本下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
也可以访问:https://github.com/infinilabs/analysis-ik/releases,查看更多版本。
bash
cd /var/lib/docker/volumes/es-plugins/_data
安装完成后进行重启ES。
bash
docker restart es
安装完成测试
没有安装之间的。
安装后的。
扩展词词典
进入到之间插件所在目录的ik分词器目录中找到Config目录。
编辑这个文件。新建文件ext.dic
xml
<?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">ext.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
编辑ext.dic
添加你需要的词库。
重启elasticsearch
bash
docker restart es
测试分词效果。
json
# 测试自定义分词库
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "小兔子真可爱,可爱的小兔子"
}
停用词词典
默认的停用词词典为stopword.dic
,可以自己查看下里面内容。
新建文件bunny_stopword.dic
,自定义停用词词库,编辑这个文件。
json
# 测试自定义分停用词词库
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "我是bunny,搜不到"
}
bash
# 重启服务
docker restart es
docker restart kibana
部署es集群
部署es集群可以直接使用docker-compose来完成,不过要求你的Linux虚拟机至少有4G的内存空间
首先编写一个docker-compose文件,内容如下:
sh
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
container_name: es01
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
container_name: es02
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
container_name: es03
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
执行安装。
bash
docker-compose up