1. 程式人生 > 其它 >Elasticsearch學習筆記1 -- 安裝elasticsearch

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
    :掛載邏輯卷,繫結es的外掛目錄
  • --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記事本編輯