elasticsearch有幾個核心概念。一開始就能理解這些概念對後面的學習會有極大的幫助。html
Elasticsearch是一個近乎實時的檢所平臺。意味着從索引一個文檔(document)到該文檔能夠被檢索以前會稍有延遲。node
集羣指一個或多個節點的集合,它們能夠承載所有數據並提供跨全部節點的聯合索引和檢索。集羣名稱由統一的名稱來標識,默認集羣名稱爲elasticsearch。這個名稱很重要,由於節點加入集羣,只經過集羣名稱進行識別。apache
確保在不一樣的環境中使用了不一樣的集羣名稱,不然會出現節點加錯集羣的狀況。例如你能夠用 logging-dev
, logging-stage
, 和 logging-prod
來區別development、staging和production集羣。此外,你能夠用各自惟一的集羣名稱來創建多個互相獨立的集羣。json
集羣內只有單個節點也是能夠的。api
節點是集羣內的獨立server,用來存儲數據,在集羣內參與索引和檢索。和集羣相似,一個節點(node)根據節點名稱進行區分,節點名稱即在啓動時分配的一個隨機的UUID。若是不想使用默認的,能夠定義節點名稱。從管理角度來看,該名稱很重要。網絡
一個節點能夠經過配置(配置文件中的)集羣名稱來加入特定集羣。默認,每一個節點都加入一個名叫elasticsearch的集羣,這意味着若是在網絡中開啓了幾個節點(假設他們能夠發現彼此),它們會自動通知而且加入一個叫elasticsearch的集羣。elasticsearch
在單個集羣中,節點能夠任意多。另外,若是沒有節點運行elasticsearch,這次開啓一個es節點會造成一個新的單節點集羣,該集羣名叫elasticsearch。分佈式
索引是具備類似特色的文檔(documents)的集合。例如,你能夠爲用戶數據建立一個索引,爲產品目錄建立一個索引,爲訂單數據建立另外一個索引。索引經過索引名稱(必須都是小寫字符)來進行區分,當進行索引、檢索、更新和刪除文檔時,涉及到索引名稱。ide
在集羣中,你能夠定義任意多的索引。性能
在一個索引中,你能夠定義一種或多種樣式。一種樣式是索引的邏輯分類、分割。一般,具備共有字段的一組文檔定義爲一個類型。例如,假設你運行一個博客平臺,將全部數據存儲爲一個索引。在這個索引中,你能夠給用戶數據定義一個樣式,能夠爲博客數據定義一個樣式,能夠爲評論數據定義一個樣式。
文檔是能夠索引的基本信息單元。例如,若是你能夠爲一個客戶建立一個文檔,爲一個產品建立一個文檔,爲一個訂單建立一個索引。文檔以json格式呈現,一種無處不在的互聯網數據交換格式。
在一個索引/樣式中,你能夠存儲任意多的文檔。注意雖然文檔存在於索引中,它必須被索引/分配到索引內的一種樣式中。
一個索引能夠存儲超出單個節點硬件限制的數據。例如,佔用了1TB硬件空間的十億條文檔的索引可能並不適合放在一個節點上,或者會出現檢索請求過慢的問題。
爲了解決這個問題,Elasticsearch提供了分片,它能夠將一個索引劃分爲多片。當你建立了一個索引,你能夠定義你指望的分片數量。每一片都是全功能獨立的索引,它能夠放在集羣內的任意一個節點上。
分片的重要性體如今兩個主要的緣由上:
分片如何分佈,檢索如何聚合文檔等這些機制都徹底由Elasticsearch管理,對於用戶是透明的。
在網絡/雲環境中,失敗無處不在,很是有必要創建一套容錯機制,以防出現分片/節點下線或者丟失。爲此,Elasticsearch容許用戶爲索引的多個分片建立一份或多份副本,交錯分片副本集,或簡稱副本。
副本的重要性體如今如下兩點:
總而言之,每一個索引能夠分紅多片。一個索引能夠複製零次(即沒有副本)或屢次。一旦創建副本,每一個索引都會具備主分片(能夠用來進行復制副本的分片)和副本分片(主分片的複製)。在索引一建立時能夠指定每一個索引的分片個數和副本個數。索引建立好後,你能夠動態改變副本的數量,但不能改變分片的數量。
默認狀況下,Elasticsearch每一個索引有5個主分片和一個副本集,意味着若是集羣中有兩個節點,你的索引會有5個主分片和5個副本分片,每一個索引總共是10個分片。
每一個Elasticsearch分片是一個Lucence索引。在單個Lucence索引中有文檔數存在上限。根據LUCENE-5843
,限制爲2,147,483,519
個文檔。你可使用api_cat/shards
檢測分片大小。