官方原文html
Elasticsearch 中有一些很基礎但很是核心的概念,在正式開始學習前,你須要先了解下它們,這將對你後面的學習有極大的幫助。網絡
Elasticsearch 是一個近實時的搜索平臺。這也就意味着,文檔從被索引到真正能被搜索有一個簡短的延遲(一般是 1 秒)。elasticsearch
集羣,即一個或多個節點(servers)的集合,它承載了咱們保存的全部數據,並提供了在全部節點索引和搜索的能力。每一個集羣擁有一個惟一的名稱標識,默認的名稱爲 "elasticsearch"。這個名字很是重要,每一個節點只能加入到一個集羣,而每一個節點可否成爲某集羣的一部分,就是由這個名字決定的。ide
咱們須要確保不一樣的環境,集羣名稱是不一樣的,不然節點將會加入到錯誤的集羣。舉個例子,你能夠用 logging-dev、logging-stage、 logging-production 命名三個集羣來分別表示開發、預發和生產三個環境。性能
集羣中只有一個節點也能夠完美工做。並且,你能夠經過設置不一樣的集羣名稱,實現運行多個集羣的目標。學習
節點是一個單一的服務,同時也是集羣的一部分,負責保存數據,集羣的索引和搜索能力須要各個節點的參與。和集羣同樣,每一個節點也有本身的名字,節點的名稱默認是經過 UUID 隨機產生的,在節點啓動時,會爲其分配一個名稱。若是不但願使用默認生成的名稱,也能夠自定義。這個名字也很重要,集羣會經過它們來標識每一個節點,在進行集羣管理時,要知道哪些節點屬於某個集羣一樣須要節點名稱來識別。ui
經過爲某個節點配置集羣名稱,就能夠把它加入到指定的集羣。節點默認會被加入到名稱爲"elaticsearch" 的集羣。若是在一個網絡中啓動了多個節點,而且它們能夠互相發現,那麼這些節點就會自發組成一個名稱爲 "elaticsearch" 的集羣。cdn
一個集羣能夠由任意多個節點組成。若是網絡中沒有正在運行的節點,那麼啓動一個新節點將自動建立一個新的集羣,而這個集羣只包含了一個節點,默認名稱爲 "elasticsearch"。server
索引,是有着類似性的文檔的一組集合。怎麼理解呢?舉個例子,你能夠用一個索引存儲消費者一類的數據,一個索引保存商品類信息、還有一個索引保存訂單數據。 每一個索引都是經過名稱(必須是小寫)來識別的。當咱們對某個索引中文檔數據執行一些操做時,好比索引、搜索、更新和刪除時,也要經過名字識別。htm
一個集羣能夠定義任意多個索引。
注:Type 在 Elasticsearch 6.0 已經被棄用了。再也不支持多個類型
類型是用於在索引上實現一種邏輯上的分類/分區,這讓咱們能夠在一個索引中存儲不一樣類型的文檔,好比,user 類型,blog 類型。可是,在 6.0 之後, 已經不支持在一個建立多個 Type 類型了,並且,Type 類型這個概念將會在下一個版本,也就是 7.0 完全移除。
文檔是 Elasticsearch 中能被索引的最小信息單元。好比,你能夠用一個文檔表示一個消費者,一個文檔表示一個商品,還有一個文檔表示一筆訂單。文檔是以 JSON 格式表示的,這是一種很經常使用的數據格式。
在一個索引/類型中,咱們能夠保存任意多個文檔。要說明的是,雖然物理意義上,文檔是保存在索引中的,但當前版本(6.5),一個文檔的保存必需要指定索引/類型。
毫無疑問,一個索引中存儲的數據量可能突破單個節點的硬件限制。舉個栗子,假設一個含有十億個文檔的索引將佔用 1T 的磁盤空間,那麼一個節點的磁盤空間可能不夠。 即便有足夠的空間,也會出如今單一節點請求處理太慢的問題。
如何解決這個問題呢?Elasticsearch 提供了一種能力,能夠把一個索引拆分爲多個部分,每一個部分稱爲 sharps,即分片。建立索引時,你能夠指定索引的分片數,每一個分片其實都是一個獨立的,功能齊全的 "索引 index",而且可能存在於集羣中的任何一個節點上。
分片是很是重要的,有兩個緣由:
那麼,你是否會想,索引上的分片如何分佈的呢?一個搜索請求如何查找和聚合不一樣分片的搜索結果呢?其實,Elasticsearch 已經幫咱們解決了這些問題。 並且這個過程咱們也是可見的。
在一個網絡/雲環境下,隨時可能發生異常,好比某些狀況下,切片/節點忽然中止工做,或者直接從集羣中直接消失了。於是,容錯機制是很是必要且很是重要的。基於此,Elasticsearch 提供了爲切片建立副本的能力,你能夠設置爲每一個切片建立一個或多個副本。
以兩點來介紹下副本的重要性。
簡言之,一個索引能夠被拆分紅多個切片,而一個索引也能夠被複制 0 或多份。一旦完成副本複製,每一個索引將會擁有一個主分片(原始分片,其餘副本都從這個分片拷貝)和副本分片(主分片的副本)。
索引的分片和副本數能夠在索引建立時定義。不過,在索引建立完成後,你也能夠隨時改變更態的改變副本數量。經過 _shrink 和 _split 兩個接口,你也能夠改變已建立的索引的分片數,但這不是一件小事情,最好是在建立索引時,就設置好正確的分片數。
默認狀況下,Elasticsearch 會爲每一個索引分配 5 個主分片和 5 個副本,這也就意味着,若是你的集羣中至少有兩個節點,那麼默認每一個索引會有 5 個主分片和 5 個副本,即總共包含 10 個分片。