ElasticSearch,和Solr同樣,是底層基於Apache Lucene,且具有高可靠性的企業級搜索引擎。數據庫
ElasticSearch中的一些概念其實和關係型數據庫都有對應關係,好比數據庫在ES中被稱爲索引,表在ES中被稱做Type。json
具體對應關係見下表。curl
ElasticSearch中的Replica是副本的意思,建立副本的好處有兩個,1,能夠分流部分查詢請求,2,若是集羣中的某個分片丟失了,就可使用這個副本將數據所有找回來,由於這個緣由,副本分片和源分片不會放在同一節點上。 ES中每個索引均可以被分紅多個分片,但不必定每一個分片都有副本,可是一旦建立了副本,就會有主分片的說法(做爲複製源的分片),分片和副本的數量能夠在索引建立的時候指定。下圖是副本和分片的示意圖,分片和它的副本不會在同一個節點上。ide
在索引建立以後,你能夠在任什麼時候候動態地改變副本的數量,可是你過後不能改變分片的數量。 默認狀況下,Elasticsearch中的每一個索引被分片5個主分片和1套副本,這意味着,若是你的集羣中至少有兩個節點,你的索引將會有5個主分片和另外5個副本,這樣的話每一個索引總共就有10個分片。測試
當ES的一個節點啓動後,它會經過廣播方式找到集羣中的其餘節點,而且創建鏈接。搜索引擎
在集羣中,其中的某個節點會被選取做爲主節點,這個主節點負責管理集羣狀態。這個主節點對於用戶來講是透明的,用戶不須要知道哪一個節點是主節點。任何操做均可以發送到任何節點。必要的時候,任何節點能夠並行的發送子查詢到其餘節點,而且將獲得的響應合併後發送給用戶,這些操做都不須要訪問主節點。url
主節點讀取集羣信息,在讀取過程當中,它會檢測分片的狀況,哪些分片是主分片,而且是可用的,在這一步以後,全部的分片已經準備好了,而副本尚未。下一步的操做就是找到那些已經被複制過的分片,將他們做爲副本。若是一切順利,那麼ES啓動成功了,全部的分片和副本都已經準備好了。插件
在ES工做的時候,主節點會監控全部的節點是否正常,默認配置爲:節點每隔1s主節點會發送1次心跳,超時時間爲30s,測試次數爲3次,超過3次,則認爲該節點同主節點已經脫離了。若是某一個節點出現問題,ES認爲這個節點損壞,該節點會從集羣中刪除,而且ES會從新平衡整個集羣。blog
ES經過Query DSL (基於json的查詢語言)來查詢數據,在ES內部,每次查詢分紅2個步驟,分散和聚合,分散是指查詢全部相關的分片,聚合是指把全部分片上的查詢結果合併,排序,處理而後在返回給客戶端。排序
ElasticSearch 有4中方式來構建數據庫,最簡單的方法是使用index API,將一個Document發送到特定的index,通常經過curl tools實現。第二第三種方法是經過bulk API和UDP bulk API。二者的區別僅在於鏈接方式。第四種方式是經過一個插件-river。river運行在ElasticSearch上,而且能夠從外部數據庫導入數據到ES中。須要注意的是,數據構建僅在分片上進行,而不能在副本上進行。