docker環(huán)境安裝elasticsearch

安裝elasticsearch

1.部署單點(diǎn)es

1.1.創(chuàng)建網(wǎng)絡(luò)

因?yàn)槲覀冞€需要部署kibana容器,因此需要讓es和kibana容器互聯(lián)。這里先創(chuàng)建一個(gè)網(wǎng)絡(luò):

docker network create es-net

1.2.加載鏡像

docker pull bitnami/elasticsearch:7.12.1

1.3.運(yùn)行

運(yùn)行docker命令,部署單點(diǎn)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 \
bitnami/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":內(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 :加入一個(gè)名為es-net的網(wǎng)絡(luò)中
  • -p 9200:9200:端口映射配置

在瀏覽器中輸入:http://192.168.56.103:9200 即可看到elasticsearch的響應(yīng)結(jié)果:

微信圖片_20221205190151.png

2.部署kibana

kibana可以給我們提供一個(gè)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 :加入一個(gè)名為es-net的網(wǎng)絡(luò)中,與elasticsearch在同一個(gè)網(wǎng)絡(luò)中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":設(shè)置elasticsearch的地址,因?yàn)閗ibana已經(jīng)與elasticsearch在一個(gè)網(wǎng)絡(luò),因此可以用容器名直接訪問elasticsearch
  • -p 5601:5601:端口映射配置

kibana啟動(dòng)一般比較慢,需要多等待一會(huì),可以通過命令:

docker logs -f kibana

查看運(yùn)行日志,當(dāng)查看到下面的日志,說明成功:

image-20210109105135812.png

此時(shí),在瀏覽器輸入地址訪問:http://192.168.56.103:5601,即可看到結(jié)果

2.2.DevTools

kibana中提供了一個(gè)DevTools界面:


image-20210506102630393.png

這個(gè)界面中可以編寫DSL來操作elasticsearch。并且對DSL語句有自動(dòng)補(bǔ)全功能。

3.安裝IK分詞器

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": "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這個(gè)目錄中。

2)解壓縮分詞器安裝包

下面我們需要把課前資料中的ik分詞器解壓縮,重命名為ik

image-20210506110249144.png

3)上傳到es容器的插件數(shù)據(jù)卷中

也就是/var/lib/docker/volumes/es-plugins/_data

image-20210506110704293.png

4)重啟容器

# 4、重啟容器
docker restart es
# 查看es日志
docker logs -f es

5)測試:

IK分詞器包含兩種模式:

  • ik_smart:最少切分

  • ik_max_word:最細(xì)切分

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "黑馬程序員學(xué)習(xí)java太棒了"
}

結(jié)果:

{
  "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" : "學(xué)習(xí)",
      "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 擴(kuò)展詞詞典

隨著互聯(lián)網(wǎng)的發(fā)展,“造詞運(yùn)動(dòng)”也越發(fā)的頻繁。出現(xiàn)了很多新的詞語,在原有的詞匯列表中并不存在。比如:“奧力給”,“傳智播客” 等。

所以我們的詞匯也需要不斷的更新,IK分詞器提供了擴(kuò)展詞匯的功能。

1)打開IK分詞器config目錄:

image-20210506112225508.png

2)在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ò)展字典 *** 添加擴(kuò)展詞典-->
        <entry key="ext_dict">ext.dic</entry>
</properties>

3)新建一個(gè) ext.dic,可以參考config目錄下復(fù)制一個(gè)配置文件進(jìn)行修改

傳智播客
奧力給

4)重啟elasticsearch

docker restart es

# 查看 日志
docker logs -f elasticsearch
image-20201115230900504.png

日志中已經(jīng)成功加載ext.dic配置文件

5)測試效果:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "傳智播客Java就業(yè)超過90%,奧力給!"
}

注意當(dāng)前文件的編碼必須是 UTF-8 格式,嚴(yán)禁使用Windows記事本編輯

3.4 停用詞詞典

在互聯(lián)網(wǎng)項(xiàng)目中,在網(wǎng)絡(luò)間傳輸?shù)乃俣群芸?,所以很多語言是不允許在網(wǎng)絡(luò)上傳遞的,如:關(guān)于宗教、政治等敏感詞語,那么我們在搜索時(shí)也應(yīng)該忽略當(dāng)前詞匯。

IK分詞器也提供了強(qiáng)大的停用詞功能,讓我們在索引時(shí)就直接忽略當(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>

3)在 stopword.dic 添加停用詞

習(xí)大大

4)重啟elasticsearch

# 重啟服務(wù)
docker restart elasticsearch
docker restart kibana

# 查看 日志
docker logs -f elasticsearch

日志中已經(jīng)成功加載stopword.dic配置文件

5)測試效果:

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "傳智播客Java就業(yè)率超過95%,習(xí)大大都點(diǎn)贊,奧力給!"
}

注意當(dāng)前文件的編碼必須是 UTF-8 格式,嚴(yán)禁使用Windows記事本編輯

4.部署es集群

部署es集群可以直接使用docker-compose來完成,不過要求你的Linux虛擬機(jī)至少有4G的內(nèi)存空間

首先編寫一個(gè)docker-compose文件,內(nèi)容如下:

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/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
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/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
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/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
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

Run docker-compose to bring up the cluster:

docker-compose up
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容