本文系本人根據官方文件的翻譯,能力有限、水平一般,如果對想學習Elasticsearch的朋友有幫助,將是本人的莫大榮幸。

原文出處:https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html

ElasticSearch有幾個核心概念,瞭解它們將有助於我們的整個學習過程。

近乎實時(NRT)
Elasticsearch是一個近乎實時的搜尋平臺。這意味著從你為一個文件建立索引到該文件可被檢索只有很小的時間差(通常是1秒)。

叢集(Cluster)
群集是一個或多個節點(伺服器)的集合,它們一起儲存整個資料,並在所有節點上提供聯合索引和搜尋功能。一個叢集由唯一的名稱加以識別,預設為“elasticsearch”。此名稱非常重要,因為一個節點(伺服器)只能按(叢集)的唯一名稱加入叢集。

請確保不要在不同的環境中使用相同的叢集名稱,否則節點可能會加入錯誤的叢集。舉例來講,你可以使用 logging-dev, logging-stage, 以及logging-prod 分別作為開發,測試和生產環境的叢集名稱。

一個叢集可以僅包含一個節點。而且你也可以設定多個不同的叢集,每個叢集都有自己唯一的名稱。

節點(Node)
節點是作為叢集的一臺伺服器,儲存資料並參與叢集的索引和搜尋功能。和叢集相似,節點是由名稱標識的,在節點啟動時被預設分配為隨機的UUID(Universally Unique Identifier)。如果不想要預設名稱,你可以給任意節點定義名稱。該名稱在管理你網路中的伺服器對應哪個節點時起到很重要的作用。

一個節點可以被配置為加入帶有特定名稱的叢集。預設情況下,每個節點都會加入名為elasticsearch的叢集。也就是說,如果你啟動了多個節點,並且假設它們之間是網路連通的,那麼它們將自動組一個名為elasticsearch的叢集。

在單一叢集中,你可以擁有任意數量的節點。而且,如果當前沒有其他ElasticSearch節點執行與你的網路,啟動一個新節點將組建一個新的名為elasticsearch的單節點叢集。

索引(Index)

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

在一個叢集中,你可以定義任意數量的索引。

型別(Type)
在索引中,你可以定義一或者多個型別。型別是索引的邏輯類別/分割槽,其語義完全取決於你。一般來說,型別定義為具有公共欄位集的文件。例如,假設你運營一個部落格平臺,並將所有資料儲存在一個索引中。在這個索引中,您可以定義使用者資料的型別,部落格資料的型別,以及註釋資料的型別。

文件(Document)
文件是可被索引的最小單元。舉例,你可以為一個客戶建立一個文件,為一個產品建立另一個文件,為一個訂單再建立一個文件。這個文件用JSON(JavaScript物件標記語言)表示,它是一種無處不在的Internet資料交換格式。

在一個索引或者型別中,你可以儲存任意數量的文件。注意,一個文件物理上長存於索引中,而事實上也同時必須被指定一個索引中的型別。

碎片和複製品(Shards & Replicas)
索引可以儲存大量的資料,這些資料可能超過單個節點的硬體限制。例如,佔用磁碟空間1TB的含有十億個檔案的單個索引,可能不適合放單個節點的磁碟上。因為那將拖慢服務本身以至於無法響應外部的搜尋請求。

為了解決這一問題,Elasticsearch提供了將索引分成多個塊(稱之為碎片)的能力。建立索引時,可以簡單地定義你所需的碎片數。每個碎片本身是一個全功能的、獨立的“索引”,可以被託管在叢集中的任意節點。

分片之所以重要是因為兩大原因:
1. 它允許你水平拆分/縮放內容卷
2. 它允許你跨分片地並行操作(可能在多個節點上)從而提高效能/吞吐量

分片的分佈機制、以及分片上文件聚合後返回給檢索請求完全由Elasticsearch管理,對於作為使用者的你來說是完全透明的。

在網路/雲端計算環境中失敗時有發生,分片/節點意外導致不可用時,擁有故障轉移機制是非常有幫助且被告訴推崇的。為此,Elasticsearch可以將一或者多個所以的分片拷貝轉化為副本分片,簡稱副本(replicas)。

副本的重要性主要有兩大原因:
1. 它提高了分片/節點故障時的可用性。需要注意的是,副本分片永遠不會和那個被它複製的原始/主分片分配在同一個節點上。(譯者注:如果和主分片在同一個節點,當該節點故障副本節點也將不可用,便失去了副本的意義)
2. 它增大了搜尋量/吞吐量,因為搜尋可以在所有副本上並行執行。

總結:每個索引可以被拆分為多個分片。一個索引可以被複制0次(不復制)或者多次。一旦被複制,每個索引將會擁有主分片(原始的被複制的分片)和副本分片(從主分片複製而來的分片)。主分片及副本分片的數量可以在建立索引的時候指定。索引被建立後,你可以動態改變副本分片的數量,但是主分片的數量則不允許修改。

每個Elasticsearch中的每個索引被預設分配了5個主分片和一個副本(節點),也就是說如果在你的叢集中有兩個節點,那麼你的索引將會有5個主分片和5個副本分片(一個完整副本)共計10個分片。

每個Elasticsearch分片是一個Lucene索引。 每個Lucene索引有個允許的包含的文件數量上限。截止
LUCENE-5843, 上限為 2,147,483,519 (= Integer.MAX_VALUE - 128) 。你可以使用_cat/shards
api來監視分片大小。

瞭解了基礎概念之後,讓我們開始接觸有趣的部分吧…