elasticsearch是一個基於Lucene的搜索服務器,採用Java語言編寫,使用Lucene構建索引、提供搜索功能,並做爲Apache許可條款下的開發源碼發佈,是當前流行的企業級搜索引擎。其實Lucene的功能已經很強大了,爲何還要畫蛇添足的開發elasticsearch呢?緣由是由於Lucene只是一個由Java語言編寫的庫,對不適用Java語言的開發人員並不友好。因此elasticsearch在Lucene上作了不少改進,提供了多種語言的接口。Lucene之於elasticsearch堪比發動機之於汽車,elasticsearch底層使用的仍然是Lucene的api,Lucene專一於底層搜索的建設,elasticsearch專一於企業應用。elasticsearch的目標是讓全文搜索變得簡單,開發者能夠經過簡單明瞭的restful api輕鬆實現搜索功能,而沒必要去面對Lucene的複雜性。node
Gateway是elasticsearch用來存儲索引的文件系統,支持多種文件類型,Local FileSystem是本地的文件系統,Shared FileSystem是共享存儲,也可使用Hadoop的HDFS分佈式存儲,也能夠存儲在Amazon的s3服務器上。sql
Gateway上層是一個分佈式的Lucene框架,elasticsearch的底層Api是由Lucene提供的,每個elasticsearch節點上都有一個Lucene節點的支持。數據庫
Lucene之上是elasticsearch的模塊,包括索引模塊、搜索模塊、映射解析模塊等。river至關於第三方插件,用於導入第三方數據源,在2.x以後已經再也不使用。編程
elasticsearch模塊之上是Discovery和Scripting和第三方插件。Discovery是elasticsearch的節點發現模塊,不一樣機器上的elasticsearch節點要組成集羣須要進行消息通訊,集羣內部須要選舉master節點,這些工做都是Discovery模塊完成的。Scripting用來支持Python、JavaScript等多種語言的,能夠在查詢語句中嵌入,使用script語句性能稍低。elasticsearch也支持多種第三方插件。api
再上層是elasticsearch的傳輸模塊和JMX。傳輸模塊支持Thrift、Memcached、Http,默認使用HTTP傳輸。JMX是Java的管理框架,用來管理elasticsearch應用安全
最上層是elasticsearch提供給用戶的接口,能夠經過restful api和elasticsearch集羣進行交互。服務器
來源:https://www.jianshu.com/p/cec1b8b3698drestful
表明一個集羣,集羣中有多個節點node,其中一個爲主節點,這個主節點能夠經過選舉產生的,主節點是對於集羣內部來講的。ES的一個概念就是去中心化,字面上理解就是無中心化節點,這是對於集羣外部來講的,由於從外部來看ES集羣,在邏輯上是一個總體,你與任何一個節點的通訊和整個ES集羣通訊是等價的網絡
一個集羣就是由一個或者多個節點組織在一塊兒,它們共同持有整個的數據,並在一塊兒提供索引和搜索功能。一個集羣由一個惟一的名字標識。一個節點只能經過指定某個集羣的名字,來加入這個集羣。架構
一個節點是集羣中的一個服務器,做爲集羣的一部分,存儲數據,參與集羣的索引和搜索功能。一個節點也是由一個名字來標識的。默認狀況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啓動的時候賦予節點,這個名字對於管理工做來講挺重要的,由於在這個管理過程當中,要肯定網絡中的哪些服務器對應於Elasticsearch集羣中的哪些節點。
ES將它的數據存儲在一個或多個索引(index)中。相似sql中的數據庫。能夠向索引中寫入文檔或者讀取文檔,並經過ES內部使用Lucene將數據索引或從索引中檢索數據
一個索引就是一個擁有幾分類似特徵的文檔的集合(相似於咱們在數據庫中的庫結構),一個索引由一個名字來標識,而且在咱們要對對這個索引中的文檔進行索引,搜索,更新和刪除的時候,都要使用到這個名字。
文檔是ES中主要的實體。對全部使用ES的案例來講,他們最終均可以終結爲對文檔的搜索。文檔由字段構成。
全部文檔寫進索引以前都會先進行分析,若是將輸入的文本分割爲詞條,哪些詞條又會被過濾,這種行爲叫作映射(mapping)。通常由用戶本身定義規則
每一個文檔都有與之對應的類型定義。這容許用戶在一個索引中存儲多種文檔類型,併爲不一樣文檔類型提供不一樣的映射
shards表明索引分片,ES能夠把一個完整的索引分紅多個分片,這樣的好處是能夠把一個大的索引拆分紅多個,分佈到不一樣的節點上。構成分佈式搜索。分片的數量只能在索引建立前指定,而且索引建立後不能更改。
分片有兩個好處,一是能夠水平擴展,另外一個是能夠併發提升性能。
表明索引副本,ES能夠設置多個索引副本,副本的做用一是提升系統的容錯性,實現高可用(HA),當某個節點某個分片損壞或丟失時能夠從副本中恢復;二是提升ES的查詢效率,ES會自動對搜索請求進行負載均衡。
Elasticsearch能夠當作是一個數據庫,只是和關係型數據庫比起來數據格式和功能不同而已