索引(index)是elasticsearch的一個邏輯存儲,能夠理解爲關係型數據庫中的數據庫,es能夠把索引數據存放到一臺服務器上,也能夠sharding後存到多臺服務器上,每一個索引有一個或多個分片,每一個分片能夠有多個副本。javascript
在es中,一個索引對象能夠存儲多個不一樣用途的對象,經過索引類型(index_type)能夠區分單個索引中的不一樣對象,能夠理解爲關係型數據庫中的表。每一個索引類型能夠有不一樣的結構,可是不一樣的索引類型不能爲相同的屬性設置不一樣的類型。java
在ES6.0.0及更高的版本中,建立的索引只能包含一個映射類型。在6.0.0如下的版本中建立的一個索引映射多個類型的索引在6.0.0版本中繼續發揮做用,可是將在7.0.0中徹底刪除。python
存儲在es中的主要實體叫文檔(document),能夠理解爲關係型數據庫中表的一行記錄。每一個文檔由多個字段構成,es是一個非結構化的數據庫,每一個文檔能夠有不一樣的字段,而且有一個惟一的標識符。數據庫
Mapping,就是對索引庫中索引的字段名及其數據類型進行定義。服務器
ES默認是動態建立索引和索引類型的mapping的。這就至關於無需定義Solr中的Schema,無需指定各個字段的索引規則就能夠索引文件,很方便。但有時方便就表明着不靈活。好比,ES默認一個字段是要作分詞的,但咱們有時要搜索匹配整個字段卻不行。若有統計工做要記錄每一個城市出現的次數。對於NAME字段,若記錄「new york」文本,ES可能會把它拆分紅「new」和「york」這兩個詞,分別計算這個兩個單詞的次數,而不是咱們指望的「new york」。架構
這時,就須要咱們在建立索引時定義mapping。此外,es支持多字段結構,例如:咱們但願兩個字段中有相同的值,一個用於搜索,一個用戶排序;或者一個用於分詞器分析,一個用於空白字符。app
一個分片自己就是一個完整的搜索引擎。文檔存儲在分片中,而分片則會被分配到集羣中節點中,隨着集羣的擴大和縮小,es會自動地將分片在節點之間進行遷移,以保證集羣能保持一種平衡。負載均衡
1.若是咱們的索引數據量很大,超過硬件存放單個文件的限制,就會影響查詢請求的速度。Es引入了分片技術;框架
2.將一個完整的index分紅若干部分存儲在相同或不一樣的節點上。elasticsearch
3. 每一個分片都有本身搜索,更新,刪除等和index同樣所有功能的一小塊。
4.好處:水平分割和擴展咱們存放的內容索引;分發和並行跨碎片操做提升性能/吞吐量;
5.假設索引爲firsttime,在elasticsearch-xx/data/elasticsearch/0/indices/firsttime下有5個分片,從0-4;
1.冗餘備份,防止數據丟失;
2.負載均衡
一個索引中含有主分片的數量,默認值爲5,在索引建立後這個值是不能被更改的。
每個主分片關聯的副本分片的數量,默認值爲1,這個設置在任什麼時候候均可以修改。
對副本分片數量的修改:
假設主分片爲4,副本分片爲2,則就有12條分片,其中4條主分片,8條副分片;
Elasticsearch 後來做爲一家公司(Elastic公司)進行運做,定位爲數據搜索和分析平臺。在2014年6月得到7000萬美圓融資,累積融資過億美圓。
ES如今能夠與Java、Ruby、Python、PHP、Perl、.NET等多種客戶端集成。也可與Hadoop、Spark等大數據分析平臺進行集成,功能十分強大。
基於Elasticsearch衍生出了一系列開源軟件,統稱爲 Elatic Stack
說明:
由於logstash比較耗內存,因此用Beats來替代
爲避免版本混亂,從5.0開始,Elastic公司將各組件的版本號統一。使用時,各組件版本號應一致(版本號形式:x.y.z,z能夠不一樣)。
官網的介紹: https://www.elastic.co/cn/products/elasticsearch
速度快、易擴展、彈性、靈活、操做簡單、多語言客戶端、X-Pack、hadoop/spark強強聯手、開箱即用。
分佈式:橫向擴展很是靈活
全文檢索:基於lucene的強大的全文檢索能力;
近實時搜索和分析:數據進入ES,可達到近實時搜索,還可進行聚合分析
高可用:容錯機制,自動發現新的或失敗的節點,重組和從新平衡數據
模式自由:ES的動態mapping機制能夠自動檢測數據的結構和類型,建立索引並使數據可搜索。
RESTful API:JSON + HTTP
說明:
Gateway是ES用來存儲索引的文件系統,支持多種類型。Gateway的上層是一個分佈式的lucene框架。Lucene之上是ES的模塊,包括:索引模塊、搜索模塊、映射解析模塊等ES模塊之上是 Discovery、Scripting和第三方插件。Discovery是ES的節點發現模塊,不一樣機器上的ES節點要組成集羣須要進行消息通訊,集羣內部須要選舉master節點,這些工做都是由Discovery模塊完成。支持多種發現機制,如 Zen 、EC二、gce、Azure。Scripting用來支持在查詢語句中插入javascript、python等腳本語言,scripting模塊負責解析這些腳本,使用腳本語句性能稍低。ES也支持多種第三方插件。再上層是ES的傳輸模塊和JMX.傳輸模塊支持多種傳輸協議,如 Thrift、memecached、http,默認使用http。JMX是java的管理框架,用來管理ES應用。最上層是ES提供給用戶的接口,能夠經過RESTful接口和ES集羣進行交互。