本節書摘來華章計算機《深入了解elasticsearch(原書第2版)》一書中的第1章 ,第1.2.1節,[美]拉斐爾·酷奇(rafal ku) 馬雷克·羅戈任斯基(marek rogoziski)著 張世武 餘洪淼 商旦 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
現在,讓我們浏覽一下elasticsearch的基本概念以及它們的特征。
1. 索引
elasticsearch将它的資料存儲在一個或者多個索引(index)中。用sql領域的術語來類比,索引就像資料庫,可以向索引寫入文檔或者從索引中讀取文檔。就像之前說過的那樣,elasticsearch在内部使用lucene将資料寫入索引或從索引中檢索資料。讀者需要注意的是,elasticsearch中的索引可能由一個或多個lucene索引構成,細節由elasticsearch的索引分片(shard)、複制(replica)機制及其配置決定。
2. 文檔
**3. 類型
**elasticsearch中每個文檔都有與之對應的類型(type)定義。這允許使用者在一個索引中存儲多種文檔類型,并為不同文檔類型提供不同的映射。如果同sql領域類比,elasticsearch的類型就像一個資料庫表。
4. 映射
正如你在1.1節所了解到的那樣,所有文檔在寫入索引前都将被分析。使用者可以設定一些參數,決定如何将輸入文本分割為詞條,哪些詞條應該被過濾掉,或哪些附加處理有必要被調用(例如移除html标簽)。這就是映射(mapping)扮演的角色:存儲分析鍊所需的所有資訊。雖然elasticsearch能根據字段值自動檢測字段的類型,有時候(事實上幾乎是所有時候)使用者還是想自己來配置映射,以避免出現一些令人不愉快的意外。
5. 節點
單個的elasticsearch的服務執行個體被稱為節點(node)。很多時候部署一個elasticsearch節點就足以應付大多數簡單的應用,但是考慮到容錯性或者資料膨脹到單機無法應付這些狀況,也許你會更傾向于使用多節點的elasticsearch叢集。
elasticsearch節點可以按用途分為3類。衆所周知,elasticsearch是用來索引和查詢資料的,是以第1類節點就是資料(data)節點,用來持有資料,提供對這些資料的搜尋功能。第2類節點指主(master)節點,作為監督者負責控制其他節點的工作。一個叢集中隻有一個主節點。第3類節點是部落(tribe)節點。部落節點是elasticsearch 1.0版新引入的節點類型,它可以像橋梁一樣連接配接起多個叢集,并允許我們在多個叢集上執行幾乎所有可以在單叢集elasticsearch上執行的功能。
6. 叢集
多個協同工作的elasticsearch節點的集合被稱為叢集(cluster)。elasticsearch的分布式屬性使我們可以輕松處理超過單機負載能力的資料量。同時,叢集也是無間斷提供服務的一種解決方案,即便當某些節點因為當機或者執行管理任務(例如更新)不可用時,elasticsearch幾乎是無縫內建了叢集功能。在我們看來,這是它勝過競争對手的最主要優點之一。在elasticsearch中配置一個叢集是再容易不過的事了。
7. 分片
正如我們之前提到的那樣,叢集允許系統存儲的資料總量超過單機容量。為了滿足這個需求,elasticsearch将資料散布到多個實體的lucene索引上去。這些lucene索引被稱為分片(shard),而散布這些分片的過程叫做分片處理(sharding)。elasticsearch會自動完成分片處理,并且讓使用者看來這些分片更像是一個大索引。請記住,除了elasticsearch本身自動進行分片處理外,使用者為具體的應用進行參數調優也是至關重要的,因為分片的數量在索引建立時就被配置好了,之後無法改變,除非建立一個新索引并重新索引全部資料。
8. 副本
分片處理允許使用者推送超過單機容量的資料至elasticsearch叢集。副本(replica)則解決了通路壓力過大時單機無法處理所有請求的問題。思路是很簡單的,為每個分片建立備援的副本,處理查詢時可以把這些副本當作最初的主分片(primary shard)使用。值得注意的是,副本給elasticsearch帶來了更多的安全性。如果主分片所在的節點當機了,elasticsearch會自動從該分片的副本中選出一個作為新的主分片,是以不會對索引和搜尋服務産生幹擾。可以在任意時間點添加或移除副本,是以一旦你有需要,可随時調整副本的數量。