Elasticsearch學習筆記1 -- 安裝elasticsearch
以下內容是尚矽谷學院微服務教程筆記
1.部署單點es
1.1.建立網路
因為我們還需要部署kibana容器,因此需要讓es和kibana容器互聯。這裡先建立一個網路:
docker network create es-net
1.2.載入映象
這裡我們採用elasticsearch的7.12.1版本的映象,這個映象體積非常大,接近1G。不建議大家自己pull。
大家將其上傳到虛擬機器中,然後執行命令載入即可:
# 匯入資料
docker load -i es.tar
同理還有kibana
的tar包也需要這樣做。
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
--privileged
:授予邏輯卷訪問權--network es-net
:加入一個名為es-net的網路中-p 9200:9200
:埠對映配置
在瀏覽器中輸入:http://192.168.150.101:9200 即可看到elasticsearch的響應結果:
2.部署kibana
kibana可以給我們提供一個elasticsearch的視覺化介面,便於我們學習。
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://192.168.150.101:5601,即可看到結果
2.2.DevTools
kibana中提供了一個DevTools介面:
這個介面中可以編寫DSL來操作elasticsearch。並且對DSL語句有自動補全功能。
3.安裝IK分詞器
3.1.線上安裝ik外掛(較慢)
# 進入容器內部
docker exec -it elasticsearch /bin/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 elasticsearch
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)解壓縮分詞器安裝包
下面我們需要把課前資料中的ik分詞器解壓縮,重新命名為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_max_word",
"text": "黑馬程式設計師學習java太棒了"
}
結果:
{
"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" : "程式",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "員",
"start_offset" : 4,
"end_offset" : 5,
"type" : "CN_CHAR",
"position" : 3
},
{
"token" : "學習",
"start_offset" : 5,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 4
},
{
"token" : "java",
"start_offset" : 7,
"end_offset" : 11,
"type" : "ENGLISH",
"position" : 5
},
{
"token" : "太棒了",
"start_offset" : 11,
"end_offset" : 14,
"type" : "CN_WORD",
"position" : 6
},
{
"token" : "太棒",
"start_offset" : 11,
"end_offset" : 13,
"type" : "CN_WORD",
"position" : 7
},
{
"token" : "了",
"start_offset" : 13,
"end_offset" : 14,
"type" : "CN_CHAR",
"position" : 8
}
]
}
3.3 擴充套件詞詞典
隨著網際網路的發展,“造詞運動”也越發的頻繁。出現了很多新的詞語,在原有的詞彙列表中並不存在。比如:“奧力給”,“傳智播客” 等。
所以我們的詞彙也需要不斷的更新,IK分詞器提供了擴充套件詞彙的功能。
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>
</properties>
3)新建一個 ext.dic,可以參考config目錄下複製一個配置檔案進行修改
傳智播客
奧力給
4)重啟elasticsearch
docker restart es
# 檢視 日誌
docker logs -f elasticsearch
日誌中已經成功載入ext.dic配置檔案
5)測試效果:
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "傳智播客Java就業超過90%,奧力給!"
}
注意當前檔案的編碼必須是 UTF-8 格式,嚴禁使用Windows記事本編輯
3.4 停用詞詞典
在網際網路專案中,在網路間傳輸的速度很快,所以很多語言是不允許在網路上傳遞的,如:關於宗教、政治等敏感詞語,那麼我們在搜尋時也應該忽略當前詞彙。
IK分詞器也提供了強大的停用詞功能,讓我們在索引時就直接忽略當前的停用詞彙表中的內容。
1)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)在 stopword.dic 新增停用詞
敏感詞
4)重啟elasticsearch
# 重啟服務
docker restart elasticsearch
docker restart kibana
# 檢視 日誌
docker logs -f elasticsearch
日誌中已經成功載入stopword.dic配置檔案
5)測試效果:
GET /_analyze
{
"analyzer": "ik_max_word",
"text": "傳智播客Java就業率超過95%,都點贊,奧力給!"
}
注意當前檔案的編碼必須是 UTF-8 格式,嚴禁使用Windows記事本編輯