導讀
在上一章節我們介紹Elasticsearch前世今生,今天我們繼續進行本章內容,Elasticsearch的核心概念。從一開始就理解這些概念將極大地幫助簡化學習過程。
近實時(NRT)
Elasticsearch是一個近乎實時的搜索平台。這意味着從索引文檔到可搜索文檔的時間有一點延遲(通常是一秒)。
群集
集群是一個或多個節點(服務器)的集合,它們共同保存您的整個數據,並提供跨所有節點的聯合索引和搜索功能。群集由唯一名稱標識,默認情況下為“elasticsearch”。此名稱很重要,因為如果節點設置為按名稱加入群集,則該節點只能是群集的一部分。
確保不要在不同的環境中重用相同的群集名稱,否則最終會導致節點加入錯誤的群集。例如,您可以使用logging-dev
,logging-test
以及logging-prod
用於開發,測試和生產集群。
請注意,如果群集中只有一個節點,那么它是完全正常的。此外,您還可以擁有多個獨立的集群,每個集群都有自己唯一的集群名稱。
節點
節點是作為群集一部分的單個服務器,存儲數據並參與群集的索引和搜索功能。就像集群一樣,節點由名稱標識,默認情況下,該名稱是在啟動時分配給節點的隨機通用唯一標識符(UUID)。如果不需要默認值,可以定義所需的任何節點名稱。此名稱對於管理目的非常重要,您可以在其中識別網絡中哪些服務器與Elasticsearch集群中的哪些節點相對應。
可以將節點配置為按群集名稱加入特定群集。默認情況下,每個節點都被設置到加入一個名為elasticsearch的集群,這意味着如果您在網絡上啟動了許多節點並且假設它們可以相互發現 - 它們將自動形成並加入一個名為elasticsearch的集群。
在單個群集中,您可以擁有任意數量的節點。此外,如果您的網絡上當前沒有其他Elasticsearch節點正在運行,則在默認情況下形成一個僅包括單一節點的集群,名稱為elasticsearch。
索引
索引是具有某些類似特征的文檔集合。例如,您可以擁有客戶數據,產品目錄以及訂單數據等索引。索引由名稱標識(必須全部小寫),此名稱用於在對其中的文檔執行索引,搜索,更新和刪除操作時引用索引使用。
在單個群集中,您可以根據需要定義任意數量的索引。
類型

在6.0.0中棄用。
請參閱刪除映射類型
一種類型,曾經是索引的邏輯類別/分區,允許您在同一索引中存儲不同類型的文檔,例如,一種類型用於用戶,另一種類型用於博客帖子。雖然早期版本支持類型建模,但建議讀者不要在索引中創建多個類型模模,因為在elasticsearch更高版本中刪除類型的整個概念。請參閱刪除映射類型以獲取更多信息。
文件
文檔是可以編制索引的基本信息單元。例如,您可以為單個客戶提供文檔,為單個產品提供另一個文檔,為單個訂單提供另一個文檔。該文檔以JSON(JavaScript Object Notation)表示,JSON是一種普遍存在的互聯網數據交換格式。
在索引/類型中,您可以根據需要存儲任意數量的文檔。請注意,盡管文檔實際上駐留在索引中,但實際上必須將文檔編入索引/分配給索引中的類型才能體現這個功能。
分片和副本
索引可能存儲大量數據,並且可能超過單個節點的硬件限制的數據。例如,占用1TB磁盤空間的十億個文檔的單個索引可能不適合單個節點的磁盤,或者可能太慢而無法單獨從單個節點提供搜索請求。
為了解決這個問題,Elasticsearch提供了將索引細分為多個稱為分片的功能。創建索引時,只需定義所需的分片數即可。每個分片本身都是一個功能齊全且獨立的“索引”,可以托管在集群中的任何節點上。
分片很重要,主要有兩個原因:
- 它允許您水平拆分/縮放內容量
- 它允許您跨分片(可能在多個節點上)分布和並行化操作,從而提高性能/吞吐量
分片的分布方式以及如何將其文檔聚合回搜索請求的機制完全由Elasticsearch管理,對用戶而言是透明的。
在可以隨時發生故障的網絡/雲環境中,非常有用,強烈建議使用故障轉移機制,以防分片/節點以某種方式脫機或因任何原因消失。為此,Elasticsearch允許您將索引的分片的一個或多個副本制作成所謂的副本分片或簡稱副本。
復制很重要,主要有兩個原因:
- 它在分片/節點發生故障時提供高可用性。因此,請務必注意,副本分片永遠不會在與從中復制的原始/主分片相同的節點上分配。
- 它允許您擴展搜索量/吞吐量,因為可以在所有副本上並行執行搜索。
總而言之,每個索引可以拆分為多個分片。索引也可以復制為零(表示沒有副本)或更多次。復制后,每個索引都將具有主分片(從中復制的原始分片)和副本分片(主分片的副本)。可以在創建索引時為每個索引定義分片和副本的數量。創建索引后,您可以隨時動態更改副本數,但不能在事后更改分片數。
默認情況下,Elasticsearch中的每個索引都分配了5個主分片和1個副本,這意味着如果群集中至少有兩個節點,則索引將包含5個主分片和另外5個副本分片(1個完整副本),總計為每個索引10個分片。

每個Elasticsearch分片都是Lucene索引。單個Lucene索引中可以包含最大數量的文檔。就像LUCENE-5843所規定的一樣
,最大文檔數限制為2,147,483,519
(= Integer.MAX_VALUE - 128)個。您可以使用_cat/shards
API 監控分片大小。
想用最簡單的方式去理解Elasticsearch能為你做什么,那就是使用它了,讓我們開始一起進入下一個Elasticsearch主題:elasticsearch 在各種系統環境下安裝 (windows、linux、Docker、macOS)