天天看點

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監控分片大小。

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

繼續閱讀