ES-基礎概念和原理(一)

ES其實就是基於lucene之上封裝的一個分佈式 索引框架,所以lucene擁有的特性,它都是有的,同時因爲它使基於分佈式的,所以對很多的功能進行了擴展,要想掌握ES,需要先熟悉一下Lucene,因爲熟悉了Lucene之後,不論是學ES,還是Solr都是比較容易的.在這裏插一句經常有人在選型的時候,不知道用ES還是Solr,建議可以參考下面的方案:如果系統是從頭接入搜索引擎,那麼就不要猶豫了,直接使用ES,因爲它上手快,使用也比較簡單,如果是現有系統已經有搜索引擎框架,這個時候就需要思考一下,當下框架是否可以滿足業務不斷的發展需求?以及如果要替換對應升級所需要面對的風險是否可控?以及對應的解決方案.好了進入正題,解析來進入ES的入門.

一:ES是什麼

Elasticsearch(ES)是一個基於Apache的開源索引庫Lucene而構建的 開源、分佈式、具有RESTful接口的全文搜索引擎, 還是一個 分佈式文檔數據庫.

ES可以輕鬆擴展數以百計的服務器(水平擴展), 用於存儲和處理數據. 它可以在很短的時間內存儲、搜索和分析海量數據, 通常被作爲複雜搜索場景下的核心引擎.

二:ES優點是什麼

(1) 橫向可擴展性: 作爲大型分佈式集羣, 很容易就能擴展新的服務器到ES集羣中; 也可運行在單機上作爲輕量級搜索引擎使用.

(2) 更豐富的功能: 與傳統關係型數據庫相比, ES提供了全文檢索、同義詞處理、相關度排名、複雜數據分析、海量數據的近實時處理等功能.

(3) 分片機制提供更好地分佈性: 同一個索引被分爲多個分片(Shard), 利用分而治之的思想提升處理效率.

(4) 高可用: 提供副本(Replica)機制, 一個分片可以設置多個副本, 即使在某些服務器宕機後, 集羣仍能正常工作.

(5) 開箱即用: 提供簡單易用的API, 服務的搭建、部署和使用都很容易操作.

三:ES基礎概念

部分內容來源於其它博客.

1 term

在ES中, 索引詞(term)是一個能夠被索引的精確值, 可以通過term query進行準確搜索

2 text

文本是一段普通的非結構化文字, 通常文本會被分析成多個Term, 存儲在ES的索引庫中.
文本字段一般需要先分析再存儲, 查詢文本中的關鍵詞時, 需要根據搜索條件搜索出原文本.

3 analysis

分析是將文本轉換爲索引詞的過程, 分析的結果依賴於分詞器

4 cluster

集羣由一至多個節點組成, 對外提供索引和搜索服務. 一個節點只能加入到一個集羣中.
集羣中有且只能有一個節點會被選舉爲主節點 —— 主從節點是集羣內部的說法, 對用戶是透明的; ES做到了去中心化: 訪問任一節點等價於訪問整個集羣.
同一網絡中, 每個ES集羣都要有唯一的名稱用於區分, 默認的集羣名稱爲"elasticsearch".
水平擴展時, 只需要將新增節點的集羣名稱設置爲要擴容的集羣名稱, 該節點就會自動加入集羣中.

5 node

節點是邏輯上獨立的服務, 是集羣的一部分, 可以存儲數據, 並參與集羣的索引和檢索功能.
節點也有唯一的名稱, 用於集羣的管理和通信, 節點名稱在節點啓動時自動分配一個隨機的UUID的前7個字符 —— 當然可以自定義.
如果有多個節點在運行, 默認情況下, 這些節點會自動組成一個名爲Elasticsearch的集羣.
如果只有一個節點在運行, 該節點就會組成只有一個節點的名爲Elasticsearch的集羣.
每個節點屬於哪個集羣是通過"集羣名稱"來決定的.

6 sharding

單臺機器(節點)無法存儲大量的索引數據, ES可以把一個完整的索引分成多個分片, 分佈到不同的節點上, 從而構成分佈式索引.

7 replica

ES支持爲每個Shard創建多個副本, 相當於索引數據的冗餘備份.
分片有Primary Shard(主分片)、Replica Shard(副本分片), 建立索引時, 系統會先將索引存儲在主分片中, 然後再將主分片中的索引複製到不同的副本中.

8 rever

從其他存儲方式 (如數據庫) 中同步數據到ES的方法, 它是以插件方式存在的一個ES服務, 通過讀取river中的數據並把它索引到ES中.
官方的river有CouchDB、RabbitMQ、Twitter、Wikipedia等.

9 index

索引是具有相似結構的文檔的集合, 等同於Solr中的集合, 比如可以有一個商品分類索引, 訂單索引.
每個索引都要有唯一的名稱, 名稱要小寫, 通過索引名稱來執行索引、搜索、更新和刪除等操作.
一個集羣中可以有任意多個索引, 只要保證名稱不同即可.

10 type

type是index的邏輯分類, 在ES 6.x版本之前, 每個索引中可以定義一個或多個type, 而在6.X版本之後, 一個index中只能定義一個type.
一種type一般被定義爲具有一組公共field的document, 比如對博客系統中的數據建立索引, 可以定義用戶數據type, 博客數據type, 評論數據type, 也就是每個document都必須屬於某一個具體的type, 也就是說每個document都有_type屬性

11 mapping

類似於關係數據庫中的Table結構, 每個index都有一個映射: 定義索引中每個字段的類型.
所有文檔在寫進索引之前都會先進行分析, 如何對文本進行分詞、哪些詞條又會被過濾, 這類行爲叫做映射(mapping).
映射可以提前定義, 也可以在第一次存儲文檔時自動識別. 一般由用戶自己定義規則.
類似於Solr中schema.xml約束文件的作用.

12 document

文檔是存儲在ES中的一個個JSON格式的字符串, 是ES索引中的最小數據單元, 由field(字段)構成

13 field

字段可以是一個簡單的值(如字符串、數字、日期), 也可以是一個數組, 還可以嵌套一個對象或多個對象.
字段類似於關係數據庫中表數據的列, 每個字段都對應一個類型.
可以指定如何分析某一字段的值, 即對field指定分詞器.

14 gateway

ES索引的持久化存儲方式

15 transport

內部節點或集羣與客戶端的交互方式,默認內部是使用tcp協議進行交互

16 discovery

ES節點自動發現機制,先通過廣播尋找存在的節點,然後通過多播協議來進行數據通信,支持點對點的交互

四:集羣角色

ES爲了方便我們更好的使用,在對集羣規劃的時候,有明確的節點分工,下面簡單說明一下

1 masternode

主節點,負責索引元數據的處理以及索引的增刪改操作,以及索引分片分配.

2 datanode

數據節點主要是存儲索引數據的節點,主要對文檔進行增刪改查操作,聚合操作等。數據節點對cpu,內存,io要求較高,
在優化的時候需要監控數據節點的狀態,當資源不夠的時候,需要在集羣中添加新的節點。

3 clientnode

當主節點和數據節點配置都設置爲false的時候,該節點只能處理路由請求,處理搜索,分發索引操作等,充當請求的負載平衡器。
 

4 turibenode

協調節點,可以實現誇集羣進行通信

 

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