Elasticsearch是一個高度可伸縮的開源全文搜索和分析引擎。它容許你以近實時的方式快速存儲、搜索和分析大量的數據。它一般被用做基礎的技術來賦予應用程序複雜的搜索特性和需求。html
這裏列舉了幾個Elasticsearch能夠用來作的功能例子服務器
在剩餘的本教程中,你將會被引導去把Elasticsearch安裝好並運行起來,而且對它有一個簡單的瞭解。使用基礎的操做好比索引,搜索以及修改你的數據。當你完成這個教程的時候,你應該對Elasticsearch有了一個不錯的瞭解,它是怎麼工做的,而且咱們但願你可以使用它構建出更加複雜精緻的搜索應用來挖掘你的數據裏的價值。網絡
這裏有一些Elasticsearch的核心概念。在一開始理解這些概念將會極大的使你的學習過程變得更加輕鬆。併發
Elasticsearch是一個近實時的搜索平臺。這意味着當你導入一個文檔並把它變成可搜索的時間僅會有輕微的延時。elasticsearch
一個集羣是由一個或多個節點(服務器)組成的,經過全部的節點一塊兒保存你的所有數據而且提供聯合索引和搜索功能的節點集合。每一個集羣有一個惟一的名稱標識,默認是「elasticsearch」。這個名稱很是重要,由於一個節點(Node)只有設置了這個名稱才能加入集羣,成爲集羣的一部分。ide
確保你沒有在不一樣的環境下重用相同的名稱,不然你最終可能會將節點加入錯誤的集羣。例如你可使用logging-dev,logging-stage和logging-prod來分別給開發,展現和生產集羣命名。高併發
注意,一個集羣中只有一個節點是有效的而且是很是好的。因此這樣的話,你可能須要部署多個集羣而且每一個集羣有它們惟一的集羣名稱。學習
一個節點是一個單一的服務器,是你的集羣的一部分,存儲數據,而且參與集羣的索引和搜索功能。跟集羣同樣,節點在啓動時也會被分配一個惟一的標識名稱,這個名稱默認是一個隨機的UUID(Universally Unique IDentifier)。若是你不想用默認的名稱,你能夠本身定義節點的名稱。這個名稱對於管理集羣節點,識別哪臺服務器對應集羣中的哪一個節點有重要的做用。ui
一個節點能夠經過配置特定的集羣名稱來加入特定的集羣。默認狀況下,每一個節點被設定加入一個名稱爲「elasticsearch」的集羣,這意味着若是你在你的網絡中啓動了一些節點,而且假設它們能相互發現,它們將會自動組織並加入一個名稱是「elasticsearch」的集羣。日誌
在一個集羣中,你想啓動多少節點就能夠啓動多少節點。此外,若是沒有其它節點運行在當前網絡中,只啓動一個節點將默認造成一個新的名稱爲「elasticsearch」單節點集羣。
一個索引就是含有某些類似特性的文檔的集合。例如,你能夠有一個用戶數據的索引,一個產品目錄的索引,還有其餘的有規則數據的索引。一個索引被一個名稱(必須都是小寫)惟一標識,而且這個名稱被用於索引經過文檔去執行索引,搜索,更新和刪除操做。
在一個集羣中,你能夠根據本身的需求定義任意多的索引。
警告!Type在6.0.0版本中已經不同意使用
一個類型是你的索引中的一個分類或者說是一個分區,它可讓你在同一索引中存儲不一樣類型的文檔,例如,爲用戶建一個類型,爲博客文章建另外一個類型。如今已不可能在同一個索引中建立多個類型,而且整個類型的概念將會在將來的版本中移除。查看「映射類型的移除[https://www.elastic.co/guide/...]」瞭解更多。
一個文檔是一個可被索引的數據的基礎單元。例如,你能夠給一個單獨的用戶建立一個文檔,給單個產品建立一個文檔,以及其餘的單獨的規則。這個文檔用JSON格式表現,JSON是一種廣泛的網絡數據交換格式。
在一個索引或類型中,你能夠根據本身的需求存儲任意多的文檔。注意,雖然一個文檔在物理存儲上屬於一個索引,可是文檔實際上必須指定一個在索引中的類型。
咱們在一個索引裏存儲的數據,潛在的狀況下可能會超過單節點硬件的存儲限制。例如,單個索引有上千萬個文檔須要佔用1TB的硬盤存儲空間,可是一臺機器的硬盤可能沒有這麼大,或者是即使有這麼大,可是單個節點在提供搜索服務時會響應緩慢。
爲了解決這個問題,Elasticsearch提供了分片的能力,它能夠將你的索引細分紅多個部分。當你建立一個索引的時候,你能夠簡單的定義你想要的分片的數量。每一個分片自己是一個全功能的徹底獨立的「索引」,它能夠部署在集羣中的任何節點上。
分片對於如下兩個主要緣由很重要:
一個分片是如何被分配以及文檔又是如何被彙集起來以應對搜索請求的,它的實現技術由Elasticsearch徹底管理,而且對用戶是透明的。
在一個網絡環境下或者是雲環境下,故障可能會隨時發生,有一個故障恢復機制是很是有用而且是高度推薦的,以防一個分片或節點不明緣由下線,或者由於一些緣由去除沒有了。爲了達到這個目的,Elasticsearch容許你製做分片的一個或多個拷貝放入一個叫作複製分片或短暫複製品中。
複製對於如下兩個主要緣由很重要:
總結一下,每一個索引能夠被切分紅多個分片,一個索引能夠被複制零次(就是沒有複製)或屢次。一旦被複制,每一個索引將會有一些主分片(就是那些最原始不是被複製出來的分片),還有一些複製分片(就是那些經過複製主分片獲得的分片)。
主分片和複製分片的數量能夠在索引被建立時指定。索引被建立後,你能夠隨時動態修改複製分片的數量,可是不能修改主分片的數量。
默認狀況下,在Elasticsearch中的每一個索引被分配5個主分片和一份拷貝,這意味着假設你的集羣中至少有兩個節點,你的索引將會有5個主分片和5個複製分片(每一個主分片對應一個複製分片,5個複製分片組成一個完整拷貝),總共每一個索引有10個分片。
每一個Elasticsearch分片是一個Lucene索引。在一個Lucene索引中有一個文檔數量的最大值。截至LUCENE-5843,這個限制是2,147,483,519 (= Integer.MAX_VALUE - 128)個文檔。你可使用_cat/shards API監控分片大小。
如今熟悉了概念以後,讓咱們開始有趣的部分吧...