Elasticsearch基本原理及使用

Elasticsearch使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。Elasticsearch是分佈式的實時文件存儲,每個字段都被索引並可被搜索,也是一個實時分佈式搜索和分析引擎。

1、基本術語

文檔(Document)
文檔是索引和搜索的原子單位,它是包含了一個或多個域(Field)的容器,使用JSON作爲文檔序列化格式。文檔通過其_index(文檔存儲的地方_type(文檔代表的對象的類_id(文檔的唯一標識唯一確定。

類型(Type)
類型是索引內部的邏輯分區(category/partition),然而其意義完全取決於用戶需求。一個索引內部可定義一個或多個類型(type)。一般來說,類型就是爲那些擁有相同的域的文檔做的預定義。例如,在索引中,可以定義一個用於存儲用戶數據的類型,一個存儲日誌數據的類型,以及一個存儲評論數據的類型。類比傳統的關係型數據庫領域來說,類型相當於“表”。

索引(Index)
ES將數據存儲於一個或多個索引中,索引是具有類似特性的文檔的集合。索引由其名稱(必須爲全小寫字符)進行標識,並通過引用此名稱完成文檔的創建、搜索、更新及刪除操作。一個ES集羣中可以按需創建任意數目的索引。

類比傳統的關係型數據庫領域來說,Elasticsearch集羣可以包含多個索引(indices)(數據庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多個文檔(documents)(行),然後每個文檔包含多個字段(Fields)(列)。類比如下圖:

節點(Node)
一個運行中的 Elasticsearch 實例稱爲一個節點,而集羣是由一個或者多個擁有相同cluster.name配置的節點組成, 它們共同承擔數據和負載的壓力。

ES集羣中的節點有三種不同的類型:

主節點:負責管理集羣範圍內的所有變更,例如增加、刪除索引,或者增加、刪除節點等。 主節點並不需要涉及到文檔級別的變更和搜索等操作。可以通過屬性node.master進行設置。
數據節點:存儲數據和其對應的倒排索引。默認每一個節點都是數據節點(包括主節點),可以通過node.data屬性進行設置。
協調節點:如果node.master和node.data屬性均爲false,則此節點稱爲協調節點,用來響應客戶請求,均衡每個節點的負載。

分片(Shard)

一個索引中的數據保存在多個分片中,相當於水平分表。一個分片便是一個Lucene 的實例,它本身就是一個完整的搜索引擎。我們的文檔被存儲和索引到分片內,但是應用程序是直接與索引而不是與分片進行交互。

ES實際上就是利用分片來實現分佈式。分片是數據的容器,文檔保存在分片內,分片又被分配到集羣內的各個節點裏。 當你的集羣規模擴大或者縮小時, ES會自動的在各節點中遷移分片,使得數據仍然均勻分佈在集羣裏。

一個分片可以是主分片或者副本分片。 索引內任意一個文檔都歸屬於一個主分片,所以主分片的數目決定着索引能夠保存的最大數據量。一個副本分片只是一個主分片的拷貝。 副本分片作爲硬件故障時保護數據不丟失的冗餘備份,併爲搜索和返回文檔等讀操作提供服務。

在索引建立的時候就已經確定了主分片數,但是副本分片數可以隨時修改。默認情況下,一個索引會有5個主分片,而其副本可以有任意數量。

2、工作原理

當ElasticSearch的節點啓動後,它會利用多播(multicast)(或者單播,如果用戶更改了配置)尋找集羣中的其它節點,並與之建立連接。這個過程如下圖所示:

3、常用命令

curl -XGET 'localhost:9200'curl '
curl -XGET 'localhost:9200/_stats?pretty' #查看集羣狀態
curl -XGET 'localhost:9200/{index}/_stats?pretty' #查看索引狀態
curl -XGET 'localhost:9200/{index}?pretty' #查看單個索引
curl -XGET 'localhost:9200/_cat/indices?v' #查看索引
curl -XGET 'localhost:9200/{index}/_mapping/{type}?pretty' #查看索引映射 

curl http://localhost:9200/_cat/indices?bytes=kb',#查看索引大小

 

參考資料:

es結構和原理概述:https://blog.csdn.net/duanduanpeng/article/details/72633148

ElasticSearch底層原理淺析:https://blog.csdn.net/zkyfcx/article/details/79998197

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章