1. 程式人生 > 實用技巧 >1、ElasticSearch:概述

1、ElasticSearch:概述

文章目錄

ElasticSearch 是基於 Lucene 做了一些封裝和加強

ElasticSearch,簡稱es,es是一個開源的高擴充套件分散式全文檢索引擎,它可以近乎實時的儲存、檢索資料;本身擴充套件性很好,可以擴充套件到上百臺伺服器,處理PB級別的資料。es也使用java開發並使用Lucene作為其核心來實現所有索引和搜尋的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜尋變得簡單

據國際權威的資料庫產品評測機構DB Engines的統計,在2016年1月,ElasticSearch已超過Solr等,成為排名第一的搜尋引擎類應用。

1.1、歷史

多年前, 一個叫做Shay Banon的剛結婚不久的失業開發者,由於妻子要去倫敦學習廚師,他便跟著也去了。在他找工作的過程中,為了給妻子構建一個食譜的搜尋引擎,他開始構建一個早期版本的Lucene。

直接基於Lucene工作會比較困難,所以Shay開始抽象Lucene程式碼以便ava程式設計師可以在應用中新增搜尋功能。他釋出了他的第一個開源專案,叫做"Compass"。

後來Shay找到一份工作,這份工作處在高效能和記憶體資料網格的分散式環境中,因此高效能的、實時的、分散式的搜尋引擎也是理所當然需要的。然後他決定重寫Compass庫使其成為一個獨立的服務叫做Elasticsearch。

第一個公開版本出現在2010年2月,在那之後Elasticsearch已經成為Github.上最受歡迎的專案之一, 程式碼貢獻者超過300人。一家主營Elasticsearch的公司就此成立,他們一邊提供商業支援一邊開發新功能 ,不過Elasticsearch將永遠開源且對所有人可用。Shay的妻子依舊等待著她的食譜搜尋.

誰在使用

  • 維基百科,類似百度百科,全文檢索,高亮,搜尋推薦
  • The Guardian (國外新聞網站) , 類似搜狐新聞,使用者行為日誌(點選,瀏覽,收藏,評論) +社交網路資料(又關看法) , 資料分析,給到每篇新聞文章的作者,讓他知道他的文章的公眾反饋(好,壞,熱門,垃圾,鄙視,崇拜
  • Stack Overflow (國外的程式異常討論論壇) , IT問題,程式的報錯,提交上去,有人會跟你討論和回答,全文檢問題和答案,程式報錯了,就會將報錯資訊貼上到裡面去,搜尋有沒有對應的答案
  • GitHub (開原始碼管理),搜尋 上千億行程式碼
  • 電商網站,檢索商品
  • 日誌資料分析, logstash採集日誌, ES進行復雜的資料分析, ELK技術, elasticsearch+logstash+kibana
  • 商品價格監控網站,使用者設定某商品的價格閾值,當低於該閾值的時候,傳送通知訊息給使用者,比如說訂閱牙膏白高露潔牙膏的家庭套裝低於50塊錢,就通知我,我就去買
  • BI系統 ,商業智慧, Business Intelligence。比如說有個大型商場集團, BI ,分析一下某某區域最近3年的使用者消以及使用者群體的組成構成,產出相關的數張報表, **區,最近3年,每年消費金額呈現100%的增長,而且使用者群體85%時高階白領,開一個新商場。ES執行資料分析和挖掘, Kibana進行資料視覺化
  • 國內:站內搜尋(電商,招聘,門戶,等等),IT系統搜尋(OA,CRM,ERP,等等),資料分析(ES熱門的一個使用場景)

1.2、Elasticsearch簡介

Elasticsearch是一個實時分散式搜尋和分析引擎。它讓你以前所未有的速度處理大資料成為可能。

它用於全文搜尋、結構化搜尋、分析以及將這三者混合使用:

維基百科使用Elasticsearch提供全文搜尋並高亮關鍵字,以及輸入實時搜尋(search-asyou-type)和搜尋糾錯(did-you-mean)等搜尋建議功能。

英國衛報使用Elasticsearch結合使用者日誌和社交網路資料提供給他們的編輯以實時的反饋,以便及時瞭解公眾對新發表的文章的回
應。

StackOverflow結合全文搜尋與地理位置查詢,以及more-like-this功能來找到相關的問題和答案。

Github使用Elasticsearch檢索1300億行的程式碼。

但是Elasticsearch不僅用於大型企業,它還讓像DataDog以及Klout這樣的創業公司將最初的想法變成可擴充套件的解決方案。Elasticsearch可以在你的筆記本上執行,也可以在數以百計的伺服器上處理PB級別的資料。

Elasticsearch是一個基於Apache Lucene™的開源搜尋引擎。無論在開源還是專有領域, Lucene可以被認為是迄今為止最先進、效能最好的、功能最全的搜尋弓|擎庫。

但是, Lucene只是一個庫。想要使用它,你必須使用Java來作為開發語言並將其直接整合到你的應用中,更糟糕的是, Lucene非常複雜,你需要深入瞭解檢索的相關知識來理解它是如何工作的。

Elasticsearch也使用Java開發並使用Lucene作為其核心來實現所有索|和搜尋的功能,但是它的目的是通過簡單的RESTful API來
隱藏Lucene的複雜性,從而讓全文搜尋變得簡單。

1.3、Solr簡介

Solr是Apache下的-一個頂級開源專案,採用ava開發,它是基於Lucene的全文搜尋伺服器。Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件,並對索引、搜尋效能進行了優化

Solr可以獨立執行,執行在Jetty. Tomcat等這些Servlet容器中 , Solr 索引的實現方法很簡單,用POST方法向Solr伺服器傳送一個描述Field 及其內容的XML文件, Solr根據xm|文件新增、刪除、更新索引。Solr 搜尋只需要傳送HTTP GET請求,然後對Solr返回Xml、json等格式的查詢結果進行解析,組織頁面佈局。Solr不提供構建UI的功能 , Solr提供了一個管理介面,通過管理介面可以查詢Solr的配置和執行情況。

solr是基於lucene開發企業級搜尋伺服器,實際上就是封裝了lucene。

Solr是一個獨立的企業級搜尋應用伺服器 ,它對外提供類似於Web-service的API介面。使用者可以通過http請求,向搜尋引擎伺服器提交一定格式的檔案,生成索引;也可以通過提出查詢請求,並得到返回結果。

1.4、Luence簡介

Lucene簡介

Lucene是apache軟體基金會4 jakarta專案組的一個子專案,是一個開放原始碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎而是一 個全文檢索引擎的架構 ,提供 了完整的查詢引擎和索引引擎 ,部分文字分析引擎 (英文與德文兩種西方語言 )。Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引|擎。Lucene是一 套用於全文檢索和搜尋的開源程式庫,由Apache軟體基金會支援和提供。Lucene提供了- -個簡單卻強大的應用程式介面,能夠做全文索引和搜尋。==在Java開發環境裡Lucene是一 個成熟的免費開源工具。 就其本身而言,Lucene是當前以及最近幾年最受歡迎的免費Java資訊檢索程式庫。==人們經常提到資訊檢索程式庫,雖然與搜尋引擎有關,但不應該將資訊檢索程式庫與搜尋引擎相混淆。

Lucene是一個全文檢索引擎的架構。那什麼是全文搜尋引擎?

全文搜尋引擎是名副其實的搜尋引擎,國外具代表性的有Google、Fast/AlITheWeb、 AltaVista、 Inktomi. Teoma、 WiseNut等 ,國內著名的有百度( Baidu)。它們都是通過從網際網路上提取的各個網站的資訊(以網頁文字為主)而建立的資料庫中,檢索與使用者查詢條件匹配的相關記錄,然後按一定的排列順序將結果返回給使用者 ,因此他們是真正的搜尋弓|擎。

從搜尋結果來源的角度,全文搜尋引擎又可細分為兩種, 一種是擁有自己的檢索程式( Indexer), 俗稱"蜘蛛”( Spider )程式或"機器人”( Robot )程式,並自建網頁資料庫,搜尋結果直接從自身的資料庫中呼叫,如上面提到的7家引擎;另一種則是租用其他弓|擎的資料庫,並按自定的格式排列搜尋結果,如Lycos引擎。

1.5、Elasticsearch和Solr比較

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

ElasticSearch vs Solr總結

  1. es基本是開箱即用,非常簡單。Solr安裝略微複雜一丟丟 !

  2. Solr利用Zookeeper進行分散式管理,而Elasticsearch自身帶有分散式協調管理功能。

  3. Solr支援更多格式的資料,比如JSON、XML、CSV,而Elasticsearch僅支援json檔案格式。

  4. Solr官方提供的功能更多,而Elasticsearch本身更注重於核心功能,高階功能多有第三方外掛提供,例如圖形化介面需要kibana友好支撐

  5. Solr查詢快,但更新索引時慢(即插入刪除慢),用於電商等查詢多的應用;

    • ES建立索引快(即查詢慢),即實時性查詢快,用於facebook新浪等搜尋。
    • Solr是傳統搜尋應用的有力解決方案,但Elasticsearch更適用於新興的實時搜尋應用
  6. Solr比較成熟,有一個更大,更成熟的使用者、開發和貢獻者社群,而Elasticsearch相對開發維護者較少,更新太快,學習使用成本較局

學習視訊:網址