Elasticsearch相關概念
文檔
1. elasticsearch是面向文檔的,文檔是所有可搜索數據的最小單位,例如:
1. 日志文件中的日志項
2. 一本電影的具體信息 / 一張唱片的詳細信息
3. MP3播放器里的一首歌 / 一篇PDF文檔中的具體內容
2. 文檔會被序列化為Json格式,保持在elasticsearch中
1. Json對象有字段注冊
2. 每個字段都有對應的字段類型(字符串,數值,布爾,日期,二進制,范圍類型)
3. 每個文檔都有一個 uniqueID
1. 你可以自己指定ID
2. 或者通過Elasticsearch自動生成
文檔的元數據
1. 元數據可以認為是每個json數據自帶的原始的字段,用于標注文檔的相關信息,主要有以下幾個元數據:
1. _indx 文檔所屬的索引名
2. _type 文檔所屬的類型名
3. _id 文檔的唯一ID
4. _source 文檔的原始JSON數據
5. _version 文檔的版本信息
6. _score 相關性打分
索引 Index
1. 索引是文檔的容器,是一類文檔結合
Index體現了邏輯空間的概念:每個索引都有自己的Mapping定義,用于定義包含的文檔的字段名和字段類型
每個索引的數據分布在Shard上,Shard體現了物理空間的概念
2. 索引的Mapping和Settings
Mapping定義文檔字段的類型
settings定義不同的數據分布
索引的不同語義
1. 名詞:一個Elasticsearch集群中,可以創(chuàng)建很多不同的索引
2. 動詞:保存一個文檔到elasticsearch的過程也叫索引(indexing),即es創(chuàng)建一個倒排索引的過程
3. 名詞:一個B樹索引,一個倒排索引
Type
Type是一類索引的組合
1. 在7.0之前,一個Index可以設置很多Types
2. 6.0開始,Type已經被Deprecated。7.0開始,一個索引只能創(chuàng)建一個type,即“_doc”
與傳統(tǒng)關系型數據庫RDMS的對比
1. ES的特點是弱結構化,相關性,高性能全文檢索
2. RDMS 事務性和數據聚合Join
| RDMS | ES |
|---|---|
| Table | Index(Type) |
| Row | Document |
| Column | Field |
| Schema | Mapping |
| SQL | DSL |
REST API
ES提供rest api的接口,以便于各種語言調用

image-20210324143155276
分布式集群
分布式集群是目前的主流做法,原因也是顯而易見的,分布式系統(tǒng)具有單機系統(tǒng)無法比擬的高可用性和可擴展性
1. 高可用性:
1. 服務可用性:允許有節(jié)點停止服務
2. 數據可用性:部分節(jié)點丟失,不會丟失數據
2. 可擴展性:
1. 可以水平擴展
節(jié)點
1. 節(jié)點是一個ES實例
1. 本質上就是一個JAVA進程
2. 一臺機器上可以運行多個ES進程,但是生產環(huán)境一般建議一臺機器只運行一個ES實例
2. 每個節(jié)點都有名字,通過配置文件配置,或者啟動的時候,加上 -E node.name=node1 指定
3. 每個節(jié)點在啟動后,會分配一個UID,保持在data目錄下
Master-eligible nodes 和Master Node
1. 每個節(jié)點啟動后,默認就是一個Master eligible節(jié)點
1. 可以設置node.master:false禁止
2. Master-eligible節(jié)點可以參加選主流程,成為Master節(jié)點
3. 當第一個節(jié)點啟動的時候,它會將自己選舉為Master節(jié)點
4. 每個節(jié)點上都保存了集群的狀態(tài),只有Master節(jié)點才能修改集群的狀態(tài)信息
1. 集群狀態(tài)(Cluster State) ,維護了一個集群中,必須的信息
1. 所有的節(jié)點信息
2. 所有的索引和棋相關的Mapping和Settings信息
3. 分片的路有信息
Data Node
可以保存數據的節(jié)點,叫做Data Node,負責保存分片數據,在數據擴展上起到了至關重要的作用
Coordinating Node
1. 負責接收Client的請求,將請求分發(fā)到合適的節(jié)點,最終把結果匯集到一起
2. 每個節(jié)點默認都起了Coordinationg Node的職責
Hot & Warm Node
不同硬件配置的Data Node,用來實現Hot & Warm 架構,降低集群部署的成本
Machine Learning Node
顧名思義,負責跑機器學習的Job,用來做異常檢測
Tribe Node
(5.3開始用Cross Cluster Serach) Tribe Node 連接到不同的ES集群,并且支持將這些集群當做一個單獨的集群處理
配置節(jié)點類型
1. 開發(fā)環(huán)境中一個節(jié)點可以承擔多種角色
2. 生產環(huán)境中,應該設置單一的角色的節(jié)點
| 節(jié)點類型 | 配置參數 | 默認值 |
|---|---|---|
| master eligible | node.master | true |
| data | node.data | true |
| ingest | node.ingest | true |
| coordinating only | 無 | 每個節(jié)點默認都是coordinating,設置其它類型全部為false |
| machine_learing | node.ml | ture(需要 enable x-pack) |
分片
1. 主分片:用以解決數據水平擴展的問題,通過主分片,可以將數據分布到集群內的所有節(jié)點之上
1. 一個分片是一個運行的Lucene的實例
2. 主分片數在索引創(chuàng)建時指定,后續(xù)不允許修改,除非Reindex
2. 副本,用以解決數據高可用的問題,分片是主分片的拷貝
1. 副本分片數,可以動態(tài)調整
2. 增加副本數,還可以在一定程度上提高服務的可用性(讀取的吞吐)
3. 對于生產環(huán)境中分片的設定,需要提前做好容量規(guī)劃
1. 分片數設置過小
1. 導致后續(xù)無法增加節(jié)點,實現水平擴展
2. 單個分片的數據量太大,導致數據重新分配耗時
2. 分片數設置過大
1. 影響搜索結果的相關性打分,影響統(tǒng)計結果的準確性
2. 單個節(jié)點上過多的分片,會導致資源浪費,同時也會影響性能
查看集群的健康情況
1. Green: 主分片與副本都正常分配
2. Yellow:主分片全部正常分配,有副本分配未能正常分配
3. Red:有主分片未能分配
1. 例如,當服務器的磁盤容量超過85%時,去創(chuàng)建一個新的索引
更多內容歡迎關注我的個人公眾號“韓哥有話說”,100G人工智能學習資料,大量后端學習資料。