在上一章節咱們介紹Elasticsearch前世此生,今天咱們繼續進行本章內容,Elasticsearch的核心概念。從一開始就理解這些概念將極大地幫助簡化學習過程。html
Elasticsearch是一個近乎實時的搜索平臺。這意味着從索引文檔到可搜索文檔的時間有一點延遲(一般是一秒)。node
集羣是一個或多個節點(服務器)的集合,它們共同保存您的整個數據,並提供跨全部節點的聯合索引和搜索功能。羣集由惟一名稱標識,默認狀況下爲「elasticsearch」。此名稱很重要,由於若是節點設置爲按名稱加入羣集,則該節點只能是羣集的一部分。linux
確保不要在不一樣的環境中重用相同的羣集名稱,不然最終會致使節點加入錯誤的羣集。例如,您可使用logging-dev
,logging-test
以及logging-prod
用於開發,測試和生產集羣。git
請注意,若是羣集中只有一個節點,那麼它是徹底正常的。此外,您還能夠擁有多個獨立的集羣,每一個集羣都有本身惟一的集羣名稱。github
節點是做爲羣集一部分的單個服務器,存儲數據並參與羣集的索引和搜索功能。就像集羣同樣,節點由名稱標識,默認狀況下,該名稱是在啓動時分配給節點的隨機通用惟一標識符(UUID)。若是不須要默認值,能夠定義所需的任何節點名稱。此名稱對於管理目的很是重要,您能夠在其中識別網絡中哪些服務器與Elasticsearch集羣中的哪些節點相對應。apache
能夠將節點配置爲按羣集名稱加入特定羣集。默認狀況下,每一個節點都被設置到加入一個名爲elasticsearch的集羣,這意味着若是您在網絡上啓動了許多節點而且假設它們能夠相互發現 - 它們將自動造成並加入一個名爲elasticsearch的集羣。json
在單個羣集中,您能夠擁有任意數量的節點。此外,若是您的網絡上當前沒有其餘Elasticsearch節點正在運行,則在默認狀況下造成一個僅包括單一節點的集羣,名稱爲elasticsearch。windows
索引是具備某些相似特徵的文檔集合。例如,您能夠擁有客戶數據,產品目錄以及訂單數據等索引。索引由名稱標識(必須所有小寫),此名稱用於在對其中的文檔執行索引,搜索,更新和刪除操做時引用索引使用。服務器
在單個羣集中,您能夠根據須要定義任意數量的索引。網絡
請參閱刪除映射類型
一種類型,曾經是索引的邏輯類別/分區,容許您在同一索引中存儲不一樣類型的文檔,例如,一種類型用於用戶,另外一種類型用於博客帖子。雖然早期版本支持類型建模,但建議讀者不要在索引中建立多個類型模模,由於在elasticsearch更高版本中刪除類型的整個概念。請參閱刪除映射類型以獲取更多信息。
文檔是能夠編制索引的基本信息單元。例如,您能夠爲單個客戶提供文檔,爲單個產品提供另外一個文檔,爲單個訂單提供另外一個文檔。該文檔以JSON(JavaScript Object Notation)表示,JSON是一種廣泛存在的互聯網數據交換格式。
在索引/類型中,您能夠根據須要存儲任意數量的文檔。請注意,儘管文檔實際上駐留在索引中,但實際上必須將文檔編入索引/分配給索引中的類型才能體現這個功能。
索引可能存儲大量數據,而且可能超過單個節點的硬件限制的數據。例如,佔用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/shards
API 監控分片大小。
想用最簡單的方式去理解Elasticsearch能爲你作什麼,那就是使用它了,讓咱們開始一塊兒進入下一個Elasticsearch主題:elasticsearch 在各類系統環境下安裝 (windows、linux、Docker、macOS)