本地虚拟机内CentOS7安装elasticsearch-7.14.0,采用docker是比较方便的。
1.安装elasticsearch
1.1 创建网络
因为我们还需要部署kibana容器,需要让es和kibana容器互联,所以这里先创建一个网络:
docker network create es-net
1.2 查看镜像
docker search elasticsearch
1.3 拉取7.14.0版本
docker pull elasticsearch:7.14.0
1.4.准备挂载数据的文件夹
挂载就是就是将宿主机文件夹和容器内的文件夹做映射,这样在向容器内传文件时可以直接传到宿主机映射的文件夹中,更方便修改。
创建四个新的文件夹作为ES挂载用。
mkdir -p /app/docker/es/standalone/{config,data,logs,plugins}
1.5 创建容器并运行
docker run -d \
--name es \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e discovery.type="single-node" \
-v /app/docker/es/standalone/data:/usr/share/elasticsearch/data \
-v /app/docker/es/standalone/logs:/usr/share/elasticsearch/logs \
-v /app/docker/es/standalone/plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.14.0
ps:启动时会有错误
[0.001s][error][logging] Error opening log file 'logs/gc.log': Permission denied
解决方案:
chown -R 1000:1000 /app/docker/es/standalone
1.6 测试是否启动成功
本地查看
curl http://localhost:9200
{
"name" : "19b9cf4d18ca",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "JXp6Iv6NTv2ztRnIZYbF1w",
"version" : {
"number" : "7.14.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
"build_date" : "2021-07-29T20:49:32.864135063Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
外部浏览器查看:
http://192.168.23.100:9200
{
"name" : "313304c60398",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "8zMFNSYxStanYg20zzLEZg",
"version" : {
"number" : "7.14.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
"build_date" : "2021-07-29T20:49:32.864135063Z",
"build_snapshot" : false,
"lucene_version" : "8.9.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
1.7 挂载config
如果想挂载config目录,在第一次启动时config文件夹是没有文件的,直接挂载会报错。
Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options
我们可以先让ES实例不挂载config,之后采用手动进行将容器内的文件拷贝出来。
docker cp es:/usr/share/elasticsearch/config /app/docker/es/standalone
chown -R 1000:1000 /app/docker/es
然后停止并删除掉之前的容器,再次用下面的命令启动。
docker stop es
docker rm es
docker run -d \
--name es \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-e discovery.type="single-node" \
-v /app/docker/es/standalone/config:/usr/share/elasticsearch/config \
-v /app/docker/es/standalone/data:/usr/share/elasticsearch/data \
-v /app/docker/es/standalone/plugins:/usr/share/elasticsearch/plugins \
-v /app/docker/es/standalone/logs:/usr/share/elasticsearch/logs \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.14.0
2.开通9200、9300端口防火墙
执行如下命令开通9200、9300端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --zone=public --add-port=9300/tcp --permanent
重新加载防火墙使开放的端口即时生效
firewall-cmd --reload
查看开放的公共端口列表
firewall-cmd --zone=public --list-ports
3.部署kibana
kibana可以给我们提供一个elasticsearch的可视化界面,便于操作。
- 拉取kibana镜像
docker pull kibana:7.14.0
- 创建并运行kibana容器
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.14.0
--network es-net
:加入一个名为es-net的网络中,与elasticsearch在同一个网络中-e ELASTICSEARCH_HOSTS=http://es:9200
:设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch- -p 5601:5601:端口映射配置
3.开放5601端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
4.测试
http://192.168.23.100:5601
4.安装分词插件
4.1 安装IK分词器插件
1.github下载ik插件
elasticsearch-analysis-ik-source-7.14.0.zip
elasticsearch-analysis-ik-7.14.0.zip
2.将安装包移动到挂载目录 /app/docker/es/plugins/ik/ 中
mkdir -p /app/docker/es/plugins/ik
cd /app/docker/es/plugins/ik
unzip elasticsearch-analysis-ik-7.14.0.zip
-rw-r--r--. 1 root root 5225922 Apr 25 2021 extra_main.dic
-rw-r--r--. 1 root root 63188 Apr 25 2021 extra_single_word.dic
-rw-r--r--. 1 root root 63188 Apr 25 2021 extra_single_word_full.dic
-rw-r--r--. 1 root root 10855 Apr 25 2021 extra_single_word_low_freq.dic
-rw-r--r--. 1 root root 156 Apr 25 2021 extra_stopword.dic
-rw-r--r--. 1 root root 625 Apr 25 2021 IKAnalyzer.cfg.xml
-rw-r--r--. 1 root root 3058510 Apr 25 2021 main.dic
-rw-r--r--. 1 root root 123 Apr 25 2021 preposition.dic
-rw-r--r--. 1 root root 1824 Apr 25 2021 quantifier.dic
-rw-r--r--. 1 root root 164 Apr 25 2021 stopword.dic
-rw-r--r--. 1 root root 192 Apr 25 2021 suffix.dic
-rw-r--r--. 1 root root 752 Apr 25 2021 surname.dic
3.删除压缩包
rm -rf elasticsearch-analysis-ik-7.14.0.zip
4.重启es
docker restart es
5.测试分词
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "时间管理大师"
}
4.2 安装pinyin分词器插件
1.github下载pinyin插件
elasticsearch-analysis-pinyin-source-7.14.0.zip
elasticsearch-analysis-pinyin-7.14.0.zip
2.将安装包移动到挂载目录 /app/docker/es/plugins/pinyin/ 中
mkdir -p /app/docker/es/plugins/pinyin
cd /app/docker/es/plugins/pinyin
unzip elasticsearch-analysis-pinyin-7.14.0.zip
-rw-r--r--. 1 root root 5225922 Apr 25 2021 extra_main.dic
-rw-r--r--. 1 root root 63188 Apr 25 2021 extra_single_word.dic
-rw-r--r--. 1 root root 63188 Apr 25 2021 extra_single_word_full.dic
-rw-r--r--. 1 root root 10855 Apr 25 2021 extra_single_word_low_freq.dic
-rw-r--r--. 1 root root 156 Apr 25 2021 extra_stopword.dic
-rw-r--r--. 1 root root 625 Apr 25 2021 IKAnalyzer.cfg.xml
-rw-r--r--. 1 root root 3058510 Apr 25 2021 main.dic
-rw-r--r--. 1 root root 123 Apr 25 2021 preposition.dic
-rw-r--r--. 1 root root 1824 Apr 25 2021 quantifier.dic
-rw-r--r--. 1 root root 164 Apr 25 2021 stopword.dic
-rw-r--r--. 1 root root 192 Apr 25 2021 suffix.dic
-rw-r--r--. 1 root root 752 Apr 25 2021 surname.dic
3.删除压缩包
rm -rf elasticsearch-analysis-pinyin-7.14.0.zip
4.重启es
docker restart es
5.测试分词
# 创建一个拼音的索引
PUT /pinyin_test/
{
"settings" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin"
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"keep_separate_first_letter" : false,
"keep_full_pinyin" : true,
"keep_original" : true,
"limit_first_letter_length" : 16,
"lowercase" : true,
"remove_duplicated_term" : true
}
}
}
}
}
# 通过一个中文名测试下拼音分词
GET /pinyin_test/_analyze
{
"text": ["刘德华"],
"analyzer": "pinyin_analyzer"
}
# 创建索引映射
POST /pinyin_test/_mapping
{
"properties": {
"name": {
"type": "keyword",
"fields": {
"pinyin": {
"type": "text",
"store": false,
"term_vector": "with_offsets",
"analyzer": "pinyin_analyzer",
"boost": 10
}
}
}
}
}
# 添加一条记录
POST /pinyin_test/_create/1001
{"name":"刘德华"}
# 根据拼音查询
GET /pinyin_test/_search
{
"query":{
"match": {
"name.pinyin": "liu"
}
}
}
评论区