1. 程式人生 > >Elasticsearch入門篇(一、基本概念)

Elasticsearch入門篇(一、基本概念)

注意:所有es入門篇部落格都是根據es官網6.2版本的文件翻譯而來

有一些概念是Elasticsearch的核心。從一開始就理解這些概念將極大地幫助簡化學習過程。

近實時(NRT)

Elasticsearch是一個接近實時的搜尋平臺。這意味著從索引文件的時間到可搜尋的時間之間存在輕微的延遲(通常為一秒)。

叢集(cluster)

群集是一個或多個節點(伺服器)的集合,它們一起儲存整個資料,並提供跨所有節點的聯合索引和搜尋功能。叢集由預設名稱為“elasticsearch”的唯一名稱標識。此名稱很重要,因為如果節點設定為通過名稱加入群集,則該節點只能成為一個叢集的一部分。

確保不要在不同的環境中重複使用相同的叢集名稱,否則可能會導致節點加入錯誤的叢集。例如,您可以使用logging-dev

logging-stage以及logging-prod作為 開發環境、試執行環境和生產環境的叢集名稱。

請注意,有一個只有一個節點的叢集是完全正確的。此外,您還可能擁有多個獨立的叢集,每個群集都有自己的唯一叢集名稱。

節點(node)

節點是屬於叢集一部分的單個伺服器,儲存資料並參與叢集的索引和搜尋功能。就像一個叢集一樣,一個節點由一個名稱來標識,預設情況下該名稱是在啟動時分配給節點的隨機通用唯一識別符號(UUID)。如果您不需要預設值,您可以定義任何您想要的節點名稱。此名稱對於管理目的非常重要,您需要確定網路中的哪些伺服器與Elasticsearch叢集中的哪些節點相對應。

可以將節點配置為按叢集名稱加入特定叢集。預設情況下,每個節點都設定為加入一個名為“elasticsearch”的叢集

,這意味著如果啟動網路中的多個節點並假設它們可以互相發現,它們將自動形成並加入一個名為elasticsearch的群集。

在單個群集中,您可以擁有任意數量的節點。此外,如果網路上當前沒有其他Elasticsearch節點正在執行,則預設情況下啟動單個節點將形成名為elasticsearch的新單節點叢集。

索引(index)

索引是一些具有相似特徵的文件集合。例如,您可以擁有客戶資料的索引,產品目錄的另一個索引以及訂單資料的另一個索引。索引由名稱(必須全部為小寫)標識,並且此名稱用於在對其中的文件執行索引,搜尋,更新和刪除操作時使用。

在單個群集中,您可以根據需要定義多個索引。

型別(type)

注意:在

6.0.0版本中被棄用

一種型別曾經是您的索引的邏輯類別或邏輯分割槽,允許您在同一索引中儲存不同型別的文件,例如一種使用者型別的文件,另一種是部落格文章型別的文件。不再可能在索引中建立多個型別,並且在更高版本中將刪除整個型別的概念。有關更多資訊,請參閱移除對映型別介紹篇。

文件(document)

文件是可被索引的基本資訊單元。例如,您可以為單個客戶建立一個文件,為單個產品建立另一個文件,為單個訂單建立另一個文件。本文件以JSON(JavaScriptObject Notation)表示,它是一種很普遍的網際網路資料交換格式。

在索引或型別中,您可以根據需要儲存任意數量的文件。請注意,儘管文件實際上駐留在索引中,但實際上文件必須被索引或被分配給索引內的型別。

分片和副本(Shards & Replicas)

索引可能潛在地儲存大量資料,這些資料可能會超出單個節點的硬體限制。例如,佔用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/shardsAPI監控分片大小。

接下來,讓我們開始有趣的部分...