1. 程式人生 > >大白話ElasticSearch是什麼以及應用場景

大白話ElasticSearch是什麼以及應用場景

ElasticSearch是一個分散式,高效能、高可用、可伸縮的搜尋和分析系統
看了上面這段話,估計很多人都懵了,這個是啥。我們先從搜尋說起,先介紹下面幾點
1、什麼是搜尋
百度、Google:我們想尋找一個我們喜歡的電影或者書籍就會去百度或者Google搜尋一下。
網際網路搜尋:電商搜尋商品,招聘網站搜尋簡歷或者崗位
IT系統的搜尋:員工管理搜尋,會議管理搜尋
2、如果用資料庫做搜尋會怎麼樣
在軟體開發裡面,資料都是儲存在資料庫裡面的,比如電商網站的商品資訊,員工的資訊等等,如果從員工角度去做搜尋功能,我們會這麼設計

這裡寫圖片描述

以上會存在幾個問題:
1. 如果表記錄上千萬上億了這個效能問題,另外一個如果有一個本文欄位要在裡面模糊配置,這個就會出現嚴重的效能問題
2. 還不能將搜尋詞拆分開來,比如上面這個只能搜尋名字是“張三”開頭的員工,如果想搜出“張小三”那是搜尋不出來的。
總體來說,用資料庫來實現搜尋,是不太靠譜的,通常效能也會很差
3、什麼是全文檢索、倒排索引和Lucene


舉個簡單的例子:比如最近上映的熱劇(碟中諜6:全面瓦解),我們想搜尋一下全面瓦解這個電視劇,可是在輸入的過程,不小心輸入了”全瓦解”,我們看看百度這個返回了什麼,百度返回的結果確實是我想要找到的內容,現在我們介紹一下全文檢索和倒排索引是什麼
這裡寫圖片描述

我們看看下面這個圖,假如我們有很多資料”全面瓦解電影,全面瓦解海報,全面瓦解評論,全面瓦解文章”等等資訊,從資料到構建倒排索引的過程我們圖中標記為“1”,通俗一點講就是,倒排索引就是講資料中的詞拆分構建一個大表,將關鍵字拆出來,後面帶上這個文章的documentid號,例如中間這個就是倒排索引了。

全文檢索就比較好理解的,就是當我們輸入“全瓦解”,會被拆分成”全”,“瓦解”2個此,用2個詞去倒排索引裡面去檢索資料,檢索到的資料返回。整個過程就叫做全文檢索
這裡寫圖片描述


如果這個用資料庫的思維來做的話,假如一共100W的記錄,按照之前的思路就是掃描100W次,而且每次掃描,都需要匹配那個文字所有的字元,確認是否包含搜尋的關鍵詞,而且還不能將搜尋詞拆解來進行檢索
如果是利用倒排索引的話,假設還是100W,拆分出來的詞語,假設有1000W個詞語,那麼在倒排索引中,就有1000W行。我們可能不需要檢索1000W詞,有可能檢索1次,就能找到我們需要的資料,也有可能是100W次,也有可能是1000W次

lucene:就是一個jar包,裡面包含了封裝好的各種建立倒排索引,以及進行搜尋的程式碼,包括各種演算法。我們就用java開發的時候

3、ElasticSearch是什麼
Lucene是單機的模式,如果你的資料量超過了一臺物理機的容量,你需要擴容,將資料拆分成2份放在不同的叢集,這個就是典型的分散式計算了。需要拷貝容錯,機器宕機,資料一致性等複雜的場景,這個實現就比較複雜了。
ES解決了這些問題


1、自動維護資料的分佈到多個節點的索引的建立,還有搜尋請求分佈到多個節點的執行
2、自動維護資料的冗餘副本,保證了一旦機器宕機,不會丟失資料
3、封裝了更多高階的功能,例如聚合分析的功能,基於地理位置的搜尋
這裡寫圖片描述

ElasticSearch的功能

  1. 分散式的搜尋引擎和資料分析引擎
    搜尋:網站的站內搜尋,IT系統的檢索
    資料分析:電商網站,統計銷售排名前10的商家
  2. 全文檢索,結構化檢索,資料分析
    全文檢索:我想搜尋商品名稱包含某個關鍵字的商品
    結構化檢索:我想搜尋商品分類為日化用品的商品都有哪些
    資料分析:我們分析每一個商品分類下有多少個商品
  3. 對海量資料進行近實時的處理
    分散式:ES自動可以將海量資料分散到多臺伺服器上去儲存和檢索
    海聯資料的處理:分散式以後,就可以採用大量的伺服器去儲存和檢索資料,自然而然就可以實現海量資料的處理了
    近實時:檢索資料要花費1小時(這就不要近實時,離線批處理,batch-processing);在秒級別對資料進行搜尋和分析

ElasticSearch的應用場景

  1. 維基百科
  2. The Guardian(國外新聞網站)
  3. Stack Overflow(國外的程式異常討論論壇)
  4. GitHub(開原始碼管理)
  5. 電商網站
  6. 日誌資料分析
  7. 商品價格監控網站
  8. BI系統
  9. 站內搜尋

ElasticSearch的特點

  1. 可以作為一個大型分散式叢集(數百臺伺服器)技術,處理PB級資料,服務大公司;也可以執行在單機上,服務小公司
  2. Elasticsearch不是什麼新技術,主要是將全文檢索、資料分析以及分散式技術,合併在了一起
  3. 對使用者而言,是開箱即用的,非常簡單,作為中小型的應用,直接3分鐘部署一下ES
  4. Elasticsearch作為傳統資料庫的一個補充,比如全文檢索,同義詞處理,相關度排名,複雜資料分析,海量資料的近實時處理;