ElasticSearch

ElasticSearch 簡介

Elasticsearch是一個分散式、可擴充套件、實時的搜尋與資料分析引擎。它可以讓您快速且近實時地儲存,檢索以及分析海量資料。它通常用作那些具有複雜搜尋功能和需求的應用的底層引擎或者技術。

全文搜尋屬於最常見的需求,開源的 Elasticsearch 是目前全文搜尋引擎的首選。

Elasticsearch的底層是開源庫吧Lucene。但是,你沒法直接用,必須自己寫程式碼呼叫它的介面,Elastic 是 Lunce 的封裝,提供了 REST API 的操作介面,開箱即用。

官方文件:點我傳送

官方中文文件:點我傳送

社群文件:點我傳送點我傳送

ElasticSearch 概念

  • 索引
  • 型別
  • 文件
  • 屬性
  • 倒排索引表

ElasticSearch quick start

docker安裝ElasticSearch Kibana

# 儲存和檢索資料
docker pull elasticsearch:7.4.2 # 視覺化檢索資料
docker pull kibana:7.4.2

至少保證記憶體可用量為300+,越多越好

# 檢視可用記憶體大小
free -m

建立例項

ElasticSearch

# 建立elasticsarch的config
mkdir -p /mydata/elasticsearch/config # 建立elasticsarch的data
mkdir -p /mydata/elasticsearch/data # 配置elasticsearch.yml
# 注: 'host:'中 ':'後跟著空格
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml # 設定elasticsearch目錄許可權
chmod -R 777 /mydata/elasticsearch/ # 啟動elasticsearch
# 特別注意:-e ES_JAVA_OPTS="-Xms64m -Xmx256m" 測試環境下,設定ES的初始記憶體和最大記憶體,否則導致過大啟動不了 ES
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2 # 當 Docker 重啟時,容器能自動啟動
docker update elasticsearch --restart=always
docker restart elasticsearch

訪問 ip:9200

# 檢視虛擬機器ip
ip addr # 訪問 ip:9200
192.168.188.128:9200

Kibana

啟動kibana時有兩種方式,任選其一。如果是通過docker使用kibana,則直接執行方式二。

方式一:
# 啟動kibana
# ELASTICSEARCH_HOSTS 一定改為自己虛擬機器的地址
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.188.128:9200 -p 5601:5601 \
-d kibana:7.4.2 # 當 Docker 重啟時,容器能自動啟動
docker update kibana --restart=always
docker restart kibana

訪問 ip:5601

# 檢視虛擬機器ip
ip addr # 訪問 ip:5601
192.168.188.128:5601
方式二:
# 檢視docker中elasticSearch的ip
# 檢視 es 例項暴露的IP
docker inspect elasticsearch
# 重新建立例項
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 \
-p 5601:5601 -d kibana:7.4.2
# 當 Docker 重啟時,容器能自動啟動
docker update kibana --restart=always
docker restart kibana

ElasticSearch 使用

_cat

# 檢視所有節點
http://192.168.188.128:9200/_cat/nodes # 檢視 es 健康狀況
http://192.168.188.128:9200/_cat/health # 檢視主節點
http://192.168.188.128:9200/_cat/master # 檢視所有索引
http://192.168.188.128:9200/_cat/indices

新增資料

elasticsearch通過接收PUT和POST請求來新增資料,然而在新增資料之前,我們需要來了解elasticsearch中的幾個概念:

  • 索引
  • 型別
  • 文件
  • 屬性

    在elasticsearch中新增資料稱其為 索引一個文件

問題彙總

問題一:

通過docker logs [容器id]檢視日誌,如果出現以下錯誤:

{.. "message" : "Unable to revive connection: http://ip:9200/"}



錯誤原因:

Docker容器中啟動服務和直接在Linux環境下安裝服務,會有ip上的區別,不在是伺服器的物理ip,而是容器對外暴露對的ip。簡單來說,需要設定kibana的ElasticSearch Ip為docker容器的ip,而不是物理機的Ip。

解決方法:檢視啟動kibana方式二

通過docker inspect elasticsearch檢視ES例項暴露出來的ip 。停止並刪除現有的Kibana容器,然後重新啟動kibana並新增環境變數引數:-e ELASTICSEARCH_HOSTS="http://es暴露的IP:9200"

# 停止例項
docker stop kibana
# 刪除例項
docker rm kibana
# 檢視 es 例項暴露的IP
docker inspect elasticsearch
# 重新建立例項
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 \
-p 5601:5601 -d kibana:7.4.2

問題二:

開啟網址一直顯示以下頁面 :

Kibana server is not ready yet

錯誤原因:

Docker容器中啟動服務和直接在Linux環境下安裝服務,會有ip上的區別,不在是伺服器的物理ip,而是容器對外暴露對的ip。簡單來說,需要設定kibana的ElasticSearch Ip為docker容器的ip,而不是物理機的Ip。

解決方法:檢視啟動kibana方式二

通過docker inspect elasticsearch檢視ES例項暴露出來的ip 。停止並刪除現有的Kibana容器,然後重新啟動kibana並新增環境變數引數:-e ELASTICSEARCH_HOSTS="http://es暴露的IP:9200"

# 停止例項
docker stop kibana
# 刪除例項
docker rm kibana
# 檢視 es 例項暴露的IP
docker inspect elasticsearch
# 重新建立例項
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 \
-p 5601:5601 -d kibana:7.4.2