ElasticSearch 介紹
基於數據庫查詢的問題
倒排(反向)索引
倒排索引:將一段文本按照一定的規則,拆分為不同的詞條(term),形成詞條和 id 的對應關系
。
以唐詩為例,所處包含“前”的詩句:
- 正向索引:《靜夜思》--> 窗前明月光 ---> “前”字
- 反向索引:“前”字 --> 窗前明月光 --> 《靜夜思》
ES 存儲和查詢的原理
-
index(索引):相當於 mysql 的庫
-
mapping(映射):相當於 mysql 的表結構
-
document(文檔):相當於 mysql 表中的數據
以下圖為例:ES 使用倒排索引,對 title 進行分詞
-
使用“手機”作為關鍵字查詢:
- 生成的倒排索引中,
詞條會排序,形成一棵樹形結構,以提升詞條的查詢速度
- 生成的倒排索引中,
-
使用“華為手機”作為關鍵字查詢:
- 華為:1, 3
- 手機:1, 2, 3
ES 核心概念
什么是 ES ?
-
ElasticSearch 是一個基於 Lucene 的搜索服務器。
-
是一個分布式、高擴展、高實時的搜索與數據分析引擎。
-
基於 RESTful Web 接口。
-
ElasticSearch 由 Java 語言開發,並作為 Apache 許可條款下的開放源碼發布,是一種流行的企業級搜索引擎。
ES 應用場景:
-
搜索:海量數據的查詢
-
日志數據分析
-
實時數據分析
核心概念:
-
**索引(index)**
:ElasticSearch 存儲數據的地方,可以理解成關系型數據庫中的數據庫概念。 -
**映射(mapping)**
:Mapping 定義了每個字段的類型、字段所使用的分詞器等。相當於關系型數據庫中的表結構。 -
**文檔(document)**
:ElasticSearch 中的最小數據單元,常以 json 格式顯示。一個 document 相當於關系型數據庫中的一行數據。 -
倒排索引:一個倒排索引由文檔中所有不重復詞的列表構成。對於其中每個詞,對應一個包含它的文檔 id 的列表。
-
類型(type):一種 type 就像一類表。如用戶表、角色表等。
- ES 5.x 中一個 index 可以有多種 type。
- ES 6.x 中一個 index 只能有一種 type。
- ES 7.x 以后,將逐步移除 type 這個概念,現在的操作已經不再使用,默認 type 為 _doc 。
ES 安裝
1)官網下載地址:https://www.elastic.co/cn/downloads/
2)解壓
# 將 elasticsearch-7.4.0-linux-x86_64.tar.gz 解壓到如 /opt 目錄下
tar -zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz -C /opt
3)創建普通用戶
- 因為安全問題,Elasticsearch 不允許 root 用戶直接運行,所以要創建新用戶,在 root 用戶中創建新用戶:
useradd es # 新增 es 普通用戶
passwd es # 為 es 用戶設置密碼
# 為新用戶授權
chown -R es:es /opt/elasticsearch-7.4.0
chmod 777 -R /opt/elasticsearch-7.4.0
4)修改 elasticsearch.yml 啟動配置
# vi /opt/elasticsearch-7.4.0/config/elasticsearch.yml
# 配置 ES 的集群名稱,默認是 elasticsearch
cluster.name: my-application
# 配置節點名稱(elasticsearch 會默認隨機指定一個名字)
node.name: node-1
# 配置為 0.0.0.0 表示允許外網訪問
network.host: 0.0.0.0
# 配置 ES 的訪問端口
http.port: 9200
# 初始化新的集群時,需要此配置來選舉 master
cluster.initial_master_nodes: ["node-1"]
5)修改參數配置
- 新創建用戶(ES)的默認最大可創建文件數和最大虛擬內存均太小,因此可以進行如下配置:
# ===最大可創建文件數=======
# vi /etc/security/limits.conf
# 在文件末尾中增加下面內容
es soft nproc 5000
es hard nproc 5000
# 重啟服務器后生效
# ===最大虛擬內存=======
# vi /etc/sysctl.conf
# 在文件中增加下面內容
vm.max_map_count=655360
# 重新加載虛擬內存
# sysctl -p
6)啟動 elasticsearch
- 注意:啟動時確認 jdk 使用的是 ES 安裝目錄中自帶的,否則容易報 jdk 不兼容的問題。
su es
cd /opt/elasticsearch-7.4.0/bin
./elasticsearch
- 如下圖可以看到 ES 啟動成功:
7)訪問 ES
- 在訪問 ES 前,請確保防火牆是關閉的:
# 暫時關閉防火牆
systemctl stop firewalld
# 永久設置防火牆狀態
systemctl enable firewalld.service # 打開
systemctl disable firewalld.service # 關閉
- 瀏覽器訪問 http://虛擬機IP:9200/ :
Kibana 介紹&安裝
1)什么是 Kibana ?
-
Kibana 是一個針對 ElasticSearch 的開源分析及可視化平台,用來搜索、查看交互存儲在 ElasticSearch 索引中的數據。使用 Kibana,可以通過各種圖表進行高級數據分析及展示。
-
Kibana 讓海量數據更容易理解。它操作簡單,基於瀏覽器的用戶界面可以快速創建儀表板(DashBoard)實時顯示 ElasticSearch 查詢動態。
2)解壓 Kibana
tar -xzf kibana-7.4.0-linux-x86_64.tar.gz -C /opt
3)修改 Kibana 配置
# vi /opt/kibana-7.4.0-linux-x86_64/config/kibana.yml
# 訪問端口
server.port: 5601
# 表示可通過外網訪問
server.host: "0.0.0.0"
# kibana服務名
server.name: "kibana-itcast"
# ES 地址
elasticsearch.hosts: ["http://127.0.0.1:9200"]
# ES 請求超時時間(默認30000ms)
elasticsearch.requestTimeout: 99999
4)啟動 Kibana
- Kibana 不建議使用 root 用戶啟動,若要用 root 啟動,需要加 --allow-root 參數
# 切換到kibana的bin目錄
cd /opt/kibana-7.4.0-linux-x86_64/bin
# 啟動
./kibana --allow-root
# 后台啟動
nohup ./kibana &
- 如下表示啟動成功:
5)訪問 kibana
-
瀏覽器訪問 http://虛擬機IP:5601/ :
-
左側菜單欄說明:
- Discover:可視化查詢分析器
- Visualize:統計分析圖表
- Dashboard:自定義主面板(添加圖表)
- Timelion:Timelion 是一個 kibana 時間序列展示組件(暫時不用)
- Dev Tools:Console 控制台(同 CURL/POSTER,操作 ES 代碼工具。有代碼提示,因此很方便)
- Management:管理索引庫(index)、已保存的搜索和可視化結果(save objects)、設置 kibana 服務器屬性等