ElasticSearch特點|B+Tree|lucene倒排索引結構|lucene與elasticsearch的關係|基本概念

ElasticSearch特點

1. 天然分片,天然集羣: es 把數據分成多個shard,下圖中的P0-P2,多個shard可以組成一份完整的數據,這些shard可以分佈在集羣中的各個機器節點中。隨着數據的不斷增加,集羣可以增加多個分片,把多個分片放到多個機子上,已達到負載均衡,橫向擴展。 這種集羣分片的機制造就了elasticsearch強大的數據容量及運算擴展性。

在這裏插入圖片描述

在實際運算過程中,每個查詢任務提交到某一個節點,該節點必須負責將數據進行整理匯聚,再返回給客戶端,也就是一個簡單的節點上進行Map計算,在一個固定的節點上進行Reduces得到最終結果向客戶端返回。

在這裏插入圖片描述

2. 天然索引:ES 所有數據都是默認進行索引的,這點和mysql正好相反,mysql是默認不加索引,要加索引必須特別說明,ES只有不加索引才需要說明。
而ES使用的是倒排索引和Mysql的B+Tree索引不同。

倒排索引是怎麼處理的 :
全文搜索引擎目前主流的索引技術就是倒排索引的方式。
傳統的保存數據的方式都是
記錄→單詞
在這裏插入圖片描述
而倒排索引的保存數據的方式是
單詞→記錄
例如 > 搜索“紅海行動”
但是數據庫中保存的數據如圖:
那麼搜索引擎是如何能將兩者匹配上的呢?
基於分詞技術構建倒排索引:
首先每個記錄保存數據時,都不會直接存入數據庫。系統先會對數據進行分詞,然後以倒排索引結構保存。

在這裏插入圖片描述
然後等到用戶搜索的時候,會把搜索的關鍵詞也進行分詞,會把“紅海行動”分詞分成:紅海和行動兩個詞。
這樣的話,先用紅海進行匹配,得到id=1和id=2的記錄編號,再用行動匹配可以迅速定位id爲1,3的記錄。
那麼全文索引通常,還會根據匹配程度進行打分,顯然1號記錄能匹配的次數更多。所以顯示的時候以評分進行排序的話,1號記錄會排到最前面。而2、3號記錄也可以匹配到。

B+Tree

在這裏插入圖片描述

lucene 倒排索引結構

可以看到 lucene 爲倒排索引(Term Dictionary)部分又增加一層Term Index結構,用於快速定位,而這Term Index是緩存在內存中的,但mysql的B+tree不在內存中,所以整體來看ES速度更快,但同時也更消耗資源(內存、磁盤)。
在這裏插入圖片描述

lucene與elasticsearch的關係

咱們之前講的處理分詞,構建倒排索引,等等,都是這個叫lucene的做的。那麼能不能說這個lucene就是搜索引擎呢?
還不能。lucene只是一個提供全文搜索功能類庫的核心工具包,而真正使用它還需要一個完善的服務框架搭建起來的應用。
好比lucene是類似於發動機,而搜索引擎軟件(ES,Solr)就是汽車。
目前市面上流行的搜索引擎軟件,主流的就兩款,elasticsearch和solr,這兩款都是基於lucene的搭建的,可以獨立部署啓動的搜索引擎服務軟件。由於內核相同,所以兩者除了服務器安裝、部署、管理、集羣以外,對於數據的操作,修改、添加、保存、查詢等等都十分類似。就好像都是支持sql語言的兩種數據庫軟件。只要學會其中一個另一個很容易上手。
從實際企業使用情況來看,elasticSearch的市場份額逐步在取代solr,國內百度、京東、新浪都是基於elasticSearch實現的搜索功能。國外就更多了 像維基百科、GitHub、Stack Overflow等等也都是基於ES的。

基本概念

在這裏插入圖片描述
在這裏插入圖片描述

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