安裝elasticsearch
1.部署單點es
1.1.創(chuàng)建網(wǎng)絡(luò)
kibana可以幫助我們方便地編寫DSL語句,所以還要裝kibana
因為我們還需要部署kibana容器,因此需要讓es和kibana容器互聯(lián)。這里先創(chuàng)建一個網(wǎng)絡(luò):
docker network create es-net
1.2.加載鏡像
這里我們采用elasticsearch的7.12.1版本的鏡像,這個鏡像體積非常大,接近1G。不建議大家自己pull。
課前資料提供了鏡像的tar包:
大家將其上傳到虛擬機(jī)中,然后運(yùn)行命令加載即可:
# 導(dǎo)入數(shù)據(jù)
docker load -i es.tar
同理還有kibana
的tar包也需要這樣做。
1.3.運(yùn)行
運(yùn)行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"
:設(shè)置集群名稱 -
-e "http.host=0.0.0.0"
:監(jiān)聽的地址,可以外網(wǎng)訪問 -
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:(將來運(yùn)行時)內(nèi)存大小 -
-e "discovery.type=single-node"
:非集群模式 -
-v es-data:/usr/share/elasticsearch/data
:掛載邏輯卷,綁定es的數(shù)據(jù)目錄 -
-v es-logs:/usr/share/elasticsearch/logs
:掛載邏輯卷,綁定es的日志目錄 -
-v es-plugins:/usr/share/elasticsearch/plugins
:掛載邏輯卷,綁定es的插件目錄 -
--privileged
:授予邏輯卷訪問權(quán) -
--network es-net
:加入一個名為es-net的網(wǎng)絡(luò)中 (kibana也會加入,二者才能互相通信) -
-p 9200:9200
:端口映射配置 (9200端口用戶訪問 9300端口將來各個節(jié)點之間互聯(lián)的端口,目前用不上)
-v 本地卷:容器目錄
若本地卷沒有,應(yīng)該會幫你創(chuàng)建,通過docker volume inspect 卷名
查看卷信息,其中就有本地目錄
# 查看所有數(shù)據(jù)卷
docker volume ls
# 查看數(shù)據(jù)卷詳細(xì)信息卷
docker volume inspect html
上述docker run ...
命令執(zhí)行完畢之后,docker ps
就可以查看到對應(yīng)進(jìn)程了,瀏覽器端也可以訪問到了
在瀏覽器中輸入:http://192.168.141.100:9200 (注意ip換成自己的) 即可看到elasticsearch的響應(yīng)結(jié)果:
2.部署kibana
kibana可以給我們提供一個elasticsearch的可視化界面,便于我們學(xué)習(xí)。
2.1.部署
運(yùn)行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的網(wǎng)絡(luò)中,與elasticsearch在同一個網(wǎng)絡(luò)中 -
-e ELASTICSEARCH_HOSTS=http://es:9200"
:設(shè)置elasticsearch的地址,因為kibana已經(jīng)與elasticsearch在一個網(wǎng)絡(luò),因此可以用容器名直接訪問elasticsearch -
-p 5601:5601
:端口映射配置
kibana啟動一般比較慢,需要多等待一會,可以通過命令:
docker logs -f kibana
查看運(yùn)行日志,當(dāng)查看到下面的日志,說明成功:
此時,在瀏覽器輸入地址訪問:http://192.168.141.100:5601,即可看到結(jié)果
看到kibana啦~
點擊Explore on my own,然后
2.2.DevTools
kibana中提供了一個DevTools界面:
這個界面中可以編寫DSL來操作elasticsearch。并且對DSL語句有自動補(bǔ)全功能。
左邊的json格式語句就是DSL查詢語句
本質(zhì)就是發(fā)送一個Restful請求到es中
2.3 分詞問題(中文不友好)
# 測試分詞器
POST /_analyze
{
"text": "李白講的java太棒了",
"analyzer": "english"
}
{
"tokens" : [
{
"token" : "李",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<IDEOGRAPHIC>",
"position" : 0
},
{
"token" : "白",
"start_offset" : 1,
"end_offset" : 2,
"type" : "<IDEOGRAPHIC>",
"position" : 1
},
{
"token" : "講",
"start_offset" : 2,
"end_offset" : 3,
"type" : "<IDEOGRAPHIC>",
"position" : 2
},
{
"token" : "的",
"start_offset" : 3,
"end_offset" : 4,
"type" : "<IDEOGRAPHIC>",
"position" : 3
},
{
"token" : "java",
"start_offset" : 4,
"end_offset" : 8,
"type" : "<ALPHANUM>",
"position" : 4
},
{
"token" : "太",
"start_offset" : 8,
"end_offset" : 9,
"type" : "<IDEOGRAPHIC>",
"position" : 5
},
{
"token" : "棒",
"start_offset" : 9,
"end_offset" : 10,
"type" : "<IDEOGRAPHIC>",
"position" : 6
},
{
"token" : "了",
"start_offset" : 10,
"end_offset" : 11,
"type" : "<IDEOGRAPHIC>",
"position" : 7
}
]
}
解析器由‘english’改成‘chinese’或者其他‘standard’也還是一樣的,運(yùn)行結(jié)果沒變
可見:英語分詞還是不錯的 ‘java’就分成了一個單詞。但是中文則是一個字一個字地分地,明顯不合適。默認(rèn)的es無法理解中文含義
3.安裝IK分詞器
Git地址: https://github.com/medcl/elasticsearch-analysis-ik
可以看到就是專門給ES使用的
3.1.在線安裝ik插件(較慢)
# 進(jìn)入容器內(nèi)部
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)查看數(shù)據(jù)卷目錄
安裝插件需要知道elasticsearch的plugins目錄位置,而我們用了數(shù)據(jù)卷掛載,因此需要查看elasticsearch的數(shù)據(jù)卷目錄,通過下面命令查看:
docker volume inspect es-plugins
顯示結(jié)果:
[
{
"CreatedAt": "2023-07-15T15:57:30+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容器的插件數(shù)據(jù)卷中
也就是/var/lib/docker/volumes/es-plugins/_data
:
4)重啟容器
# 4、重啟容器
docker restart es
# 查看es日志
docker logs es | grep analysis-ik
成功加載,分詞器安裝完畢
5)測試:
IK分詞器包含兩種模式:
-
ik_smart
:最少切分 (盡可能長地組詞,然后不再切分) -
ik_max_word
:最細(xì)切分 (分得更多,是詞就分出來,字可以重復(fù)使用)
POST /_analyze
{
"text": "胡老師講的java太棒了",
"analyzer": "ik_max_word"
}
結(jié)果:
{
"tokens" : [
{
"token" : "胡",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "老師",
"start_offset" : 1,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "講",
"start_offset" : 3,
"end_offset" : 4,
"type" : "CN_CHAR",
"position" : 2
},
{
"token" : "的",
"start_offset" : 4,
"end_offset" : 5,
"type" : "CN_CHAR",
"position" : 3
},
{
"token" : "java",
"start_offset" : 5,
"end_offset" : 9,
"type" : "ENGLISH",
"position" : 4
},
{
"token" : "太棒了",
"start_offset" : 9,
"end_offset" : 12,
"type" : "CN_WORD",
"position" : 5
},
{
"token" : "太棒",
"start_offset" : 9,
"end_offset" : 11,
"type" : "CN_WORD",
"position" : 6
},
{
"token" : "了",
"start_offset" : 11,
"end_offset" : 12,
"type" : "CN_CHAR",
"position" : 7
}
]
}
3.3 擴(kuò)展詞詞典
隨著互聯(lián)網(wǎng)的發(fā)展,“造詞運(yùn)動”也越發(fā)的頻繁。出現(xiàn)了很多新的詞語,在原有的詞匯列表中并不存在。比如:“奧力給”,“永遠(yuǎn)滴神” 等。
所以我們的詞匯也需要不斷的更新,IK分詞器提供了擴(kuò)展詞匯的功能。
1)打開IK分詞器config目錄:/var/lib/docker/volumes/es-plugins/_data/ik/config
2)在IKAnalyzer.cfg.xml配置文件內(nèi)容添加:
配置都已經(jīng)默認(rèn)寫好了,填個文件名就行了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴(kuò)展配置</comment>
<!--用戶可以在這里配置自己的擴(kuò)展字典 *** 添加擴(kuò)展詞典-->
<entry key="ext_dict">ext.dic</entry>
</properties>
3)新建一個 ext.dic,可以參考config目錄下復(fù)制一個配置文件進(jìn)行修改
其實就是一行行列出每個詞即可
全紅禪
永遠(yuǎn)滴神
奧力給
4)重啟elasticsearch
docker restart es
# 查看 日志
docker logs -f elasticsearch
日志中會顯示已經(jīng)成功加載ext.dic配置文件
或者耐心等一會兒就像,基本都能正常加載
5)測試效果:
POST /_analyze
{
"text": "全紅禪永遠(yuǎn)滴神,我的神,奧力給",
"analyzer": "ik_max_word"
}
注意當(dāng)前文件的編碼必須是 UTF-8 格式,嚴(yán)禁使用Windows記事本編輯
3.4 停用詞詞典
在互聯(lián)網(wǎng)項目中,在網(wǎng)絡(luò)間傳輸?shù)乃俣群芸欤院芏嗾Z言是不允許在網(wǎng)絡(luò)上傳遞的,如:關(guān)于宗教、政治等敏感詞語,那么我們在搜索時也應(yīng)該忽略當(dāng)前詞匯。
IK分詞器也提供了強(qiáng)大的停用詞功能,讓我們在索引時就直接忽略當(dāng)前的停用詞匯表中的內(nèi)容。
1)IKAnalyzer.cfg.xml配置文件內(nèi)容添加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴(kuò)展配置</comment>
<!--用戶可以在這里配置自己的擴(kuò)展字典-->
<entry key="ext_dict">ext.dic</entry>
<!--用戶可以在這里配置自己的擴(kuò)展停止詞字典 *** 添加停用詞詞典-->
<entry key="ext_stopwords">stopword.dic</entry>
</properties>
其實都配置好了,只是默認(rèn)兩個字典的名稱為空
3)在 stopword.dic 添加停用詞
該文件默認(rèn)已經(jīng)有了,直接在里面添加即可
的
地
了
哦
啊
嚶
4)重啟elasticsearch
# 重啟服務(wù)
docker restart elasticsearch
docker restart kibana
# 查看 日志
docker logs -f elasticsearch
日志中已經(jīng)成功加載stopword.dic配置文件
5)測試效果:
POST /_analyze
{
"text": "全紅禪永遠(yuǎn)滴神,我的神,奧力給",
"analyzer": "ik_max_word"
}
注意當(dāng)前文件的編碼必須是 UTF-8 格式,嚴(yán)禁使用Windows記事本編輯
{
"tokens" : [
{
"token" : "全紅禪",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "永遠(yuǎn)滴神",
"start_offset" : 3,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "永遠(yuǎn)",
"start_offset" : 3,
"end_offset" : 5,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "滴",
"start_offset" : 5,
"end_offset" : 6,
"type" : "CN_CHAR",
"position" : 3
},
{
"token" : "神",
"start_offset" : 6,
"end_offset" : 7,
"type" : "CN_CHAR",
"position" : 4
},
{
"token" : "我",
"start_offset" : 8,
"end_offset" : 9,
"type" : "CN_CHAR",
"position" : 5
},
{
"token" : "神",
"start_offset" : 10,
"end_offset" : 11,
"type" : "CN_CHAR",
"position" : 6
},
{
"token" : "奧力給",
"start_offset" : 12,
"end_offset" : 15,
"type" : "CN_WORD",
"position" : 7
}
]
}
全紅禪
、永遠(yuǎn)滴神
、奧利給
。 都能識別為成語了的
。不會成為分詞了
- 小結(jié)
4.部署es集群
部署es集群可以直接使用docker-compose來完成,不過要求你的Linux虛擬機(jī)至少有4G的內(nèi)存空間(不夠就重新分配增加一下)
4.1.創(chuàng)建es集群
首先編寫一個docker-compose文件,內(nèi)容如下:
docker-compose.yml
version: '2.2'
services:
es01:
image: 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
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: 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
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data02:/usr/share/elasticsearch/data
ports:
- 9201:9200
networks:
- elastic
es03:
image: 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
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
ports:
- 9202:9200
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local
networks:
elastic:
driver: bridge
從yml文件中可以看到:
es01端口9200
es02端口9201
es03端口9202
將上傳到linux
es運(yùn)行需要修改一些linux系統(tǒng)權(quán)限,修改/etc/sysctl.conf
文件
vi /etc/sysctl.conf
添加下面的內(nèi)容:
vm.max_map_count=262144
然后執(zhí)行命令,讓配置生效:
sysctl -p
若重啟了虛擬機(jī),還得先啟動下docker
systemctl start docker
Run docker-compose
to bring up the cluster:
docker-compose up -d
查看每個節(jié)點的日志
docker logs -f es01
docker logs -f es02
docker logs -f es03
4.2.集群狀態(tài)監(jiān)控
kibana可以監(jiān)控es集群,不過新版本需要依賴es的x-pack 功能,配置比較復(fù)雜。
這里推薦使用cerebro來監(jiān)控es集群狀態(tài),官方網(wǎng)址:https://github.com/lmenezes/cerebro
課前資料已經(jīng)提供了安裝包:
鏈接:https://pan.baidu.com/s/1zrji4O8niH_UmQNKBhNIPg
提取碼:hzan
解壓即可使用,非常方便。
解壓好的目錄如下:
進(jìn)入對應(yīng)的bin目錄:
雙擊其中的cerebro.bat文件即可啟動服務(wù)。
jdk17等高版本啟動,會報錯:
Caused by: java.lang.IllegalStateException: Unable to load cache item
將環(huán)境變量里的java改成jdk8的環(huán)境變量即可
也就是使用jdk8
訪問http://localhost:9000 即可進(jìn)入管理界面:
http://192.168.141.100:9200/
輸入你的elasticsearch的任意節(jié)點的地址和端口,點擊connect即可:
綠色的條,代表集群處于綠色(健康狀態(tài))。
4.3.創(chuàng)建索引庫
1)利用kibana的DevTools創(chuàng)建索引庫
在DevTools中輸入指令:
多個節(jié)點就是為了分片存儲索引庫,然后相互備份
如何分片,幾個副本呢?創(chuàng)建索引庫時配置好
PUT /itcast
{
"settings": {
"number_of_shards": 3, // 分片數(shù)量
"number_of_replicas": 1 // 副本數(shù)量
},
"mappings": {
"properties": {
// mapping映射定義 ...
}
}
}
kibana已經(jīng)停掉了,其實也可以利用cerebro創(chuàng)建索引庫
2)利用cerebro創(chuàng)建索引庫
利用cerebro還可以創(chuàng)建索引庫:
填寫索引庫信息:
點擊右下角的create按鈕:
文章來源:http://www.zghlxwxcb.cn/news/detail-567488.html
4.4.查看分片效果
回到首頁,即可查看索引庫分片效果:
和案例圖中畫的一摸一樣
這些發(fā)現(xiàn)了一個誤區(qū),上圖不是有3個索引庫,而是一個索引庫被分成了3片存儲,每片存儲在不同的es實例上,3個實例之間的分片互為備份文章來源地址http://www.zghlxwxcb.cn/news/detail-567488.html
到了這里,關(guān)于搜索引擎elasticsearch :安裝elasticsearch (包含安裝組件kibana、IK分詞器、部署es集群)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!