文章目錄
- ??安裝elasticsearch
- ??1.部署單點es
- 🌸1.1.創建網絡
- 🌸1.2.下載鏡像
- 🌸1.3.運行
- ??2.部署kibana
- 🌸2.1.部署
- 🌸2.2.DevTools
- ??3.安裝IK分詞器
- 🌸3.1.在線安裝ik插件(較慢)
- 🌸3.2.離線安裝ik插件(推薦)
- 🌸1)查看數據卷目錄
- 🌸2)解壓縮分詞器安裝包
- 🌸3)上傳到es容器的插件數據卷中
- 🌸4)重啟容器
- 🌸5)測試:
- 🌸3.3 擴展詞詞典
- ??4.部署es集群
??安裝elasticsearch
??1.部署單點es
🌸1.1.創建網絡
因為我們還需要部署kibana容器,因此需要讓es和kibana容器互聯。這里先創建一個網絡:
docker network create es-net
🌸1.2.下載鏡像
docker鏡像官網https://hub.docker.com/search?q=elasticsearch
docker pull elasticsearch:7.12.1
🌸1.3.運行
運行docker命令,部署單點es:
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 \
elasticsearch:7.12.1
命令解釋:
-e "cluster.name=es-docker-cluster"
:設置集群名稱-e "http.host=0.0.0.0"
:監聽的地址,可以外網訪問-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:內存大小-e "discovery.type=single-node"
:非集群模式-v es-data:/usr/share/elasticsearch/data
:掛載邏輯卷,綁定es的數據目錄-v es-logs:/usr/share/elasticsearch/logs
:掛載邏輯卷,綁定es的日志目錄-v es-plugins:/usr/share/elasticsearch/plugins
:掛載邏輯卷,綁定es的插件目錄--privileged
:授予邏輯卷訪問權--network es-net
:加入一個名為es-net的網絡中-p 9200:9200
:端口映射配置
??2.部署kibana
kibana可以給我們提供一個elasticsearch的可視化界面
docker pull kibana:7.12.1
🌸2.1.部署
運行docker命令,部署kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1
--network es-net
:加入一個名為es-net的網絡中,與elasticsearch在同一個網絡中-e ELASTICSEARCH_HOSTS=http://es:9200"
:設置elasticsearch的地址,因為kibana已經與elasticsearch在一個網絡,因此可以用容器名直接訪問elasticsearch-p 5601:5601
:端口映射配置
kibana啟動一般比較慢,需要多等待一會,可以通過命令:
docker logs -f kibana
查看運行日志,當查看到下面的日志,說明成功:
此時,在瀏覽器輸入地址訪問:http://ip:5601,即可看到結果
🌸2.2.DevTools
kibana中提供了一個DevTools界面:
這個界面中可以編寫DSL來操作elasticsearch。并且對DSL語句有自動補全功能。
??3.安裝IK分詞器
🌸3.1.在線安裝ik插件(較慢)
# 進入容器內部
docker exec -it es bash# 在線下載并安裝
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip#退出
exit
#重啟容器
docker restart es
🌸3.2.離線安裝ik插件(推薦)
🌸1)查看數據卷目錄
安裝插件需要知道elasticsearch的plugins目錄位置,而我們用了數據卷掛載,因此需要查看elasticsearch的數據卷目錄,通過下面命令查看:
docker volume inspect es-plugins
顯示結果:
[{"CreatedAt": "2022-05-06T10:06:34+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/es-plugins/_data","Name": "es-plugins","Options": null,"Scope": "local"}
]
說明plugins目錄被掛載到了:/var/lib/docker/volumes/es-plugins/_data
這個目錄中。
🌸2)解壓縮分詞器安裝包
下載分詞器包: https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
重命名為ik
🌸3)上傳到es容器的插件數據卷中
也就是/var/lib/docker/volumes/es-plugins/_data
:
🌸4)重啟容器
# 4、重啟容器
docker restart es
# 查看es日志
docker logs -f es
🌸5)測試:
IK分詞器包含兩種模式:
-
ik_smart
:最少切分 -
ik_max_word
:最細切分
GET /_analyze
{"analyzer": "ik_smart","text": "瘋狂星期四v50我"
}
結果:
{"tokens" : [{"token" : "瘋狂","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "星期四","start_offset" : 2,"end_offset" : 5,"type" : "CN_WORD","position" : 1},{"token" : "v50","start_offset" : 5,"end_offset" : 8,"type" : "LETTER","position" : 2},{"token" : "我","start_offset" : 8,"end_offset" : 9,"type" : "CN_CHAR","position" : 3}]
}
🌸3.3 擴展詞詞典
隨著互聯網的發展,“造詞運動”也越發的頻繁。出現了很多新的詞語,在原有的詞匯列表中并不存在。比如:“黑粉”,“愛坤” 等。
所以我們的詞匯也需要不斷的更新,IK分詞器提供了擴展詞匯的功能。
來試一把 , 可以看到根本識別不出來
GET /_analyze
{"analyzer": "ik_smart","text": "我們都是愛坤,不是黑粉"
}
1)打開IK分詞器config目錄:
2)在IKAnalyzer.cfg.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">stopword.dic</entry>
</properties>
3)新建一個 ext.dic,可以參考config目錄下復制一個配置文件進行修改
愛坤
黑粉
4)重啟elasticsearch
docker restart es# 查看 日志
docker logs -f es
- 測試一下
可以看到非常完美的分詞成功
??4.部署es集群
部署es集群可以直接使用docker-compose來完成,不過要求你的Linux虛擬機至少有4G的內存空間
首先編寫一個docker-compose文件,內容如下:
version: '2.2'
services:es01:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es01environment:- 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: -1hard: -1volumes:- data01:/usr/share/elasticsearch/dataports:- 9200:9200networks:- elastices02:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es02environment:- 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: -1hard: -1volumes:- data02:/usr/share/elasticsearch/datanetworks:- elastices03:image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1container_name: es03environment:- 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: -1hard: -1volumes:- data03:/usr/share/elasticsearch/datanetworks:- elasticvolumes:data01:driver: localdata02:driver: localdata03:driver: localnetworks:elastic:driver: bridge
Run docker-compose
to bring up the cluster:
docker-compose up