天天看點

Lucene,Solr,Elasticsearch之間的差別和聯系

https://blog.csdn.net/weixin_44318830/article/details/109166004

簡介

Lucene

        Lucene是 apache 軟體基金會某個項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎(英文與德文兩種西方語言)。順便提一下,Lucene最初是由Doug Cutting開發的,沒錯,就是那個創造了大資料Hadoop的那個男人。

Elasticsearch

        Elasticsearch是一個基于Apache Lucene 的開源實時分布式搜尋和分析引擎。它讓用前所未有的速度處理大資料成為可能。

        它用于全文搜尋、結構化搜尋、分析以及将這三者混合使用,下面列出一些典型的使用案例:

  • GitHub 使用 Elasticsearch 搜尋 20TB 的資料,包含 13億 的檔案 和 1300 億行的代碼。
  • 德國 SoundCloud 使用 Elasticsearch 來為 1.8 億 使用者提供即時精準的音樂搜尋服務。
  • Sony 公司使用 elasticsearch 作為資訊搜尋引擎。
  • 維基百科使用Elasticsearch提供全文搜尋并高亮關鍵字,以及輸入實時搜尋(search-asyou-type)和搜尋糾錯(did-you-mean)等搜尋建議功能。
  • 英國衛報使用Elasticsearch結合使用者日志和社交網絡資料提供給他們的編輯以實時的回報,以便及時了解公衆對新發表的文章的回應。

        類似的使用案例特别多,最主要的是,Elasticsearch可以在你的筆記本上運作,也可以在數以百計的伺服器上處理PB級别的資料 。

        無論在開源還是專有領域,Lucene可以被認為是迄今為止最先進、性能最好的、功能最全的搜尋引擎庫。

        但是,Lucene隻是一個庫。想要使用它,你必須使用Java來作為開發語言并将其直接內建到你的應用中,更糟糕的是,Lucene非常複雜,你需要深入了解檢索的相關知識來了解它是如何工作的。

        Elasticsearch就是通過使用Java開發并使用Lucene作為其核心來實作所有索引和搜尋的功能,但是它的目的是通過簡單的 RESTful API 來隐藏Lucene的複雜性,進而讓全文搜尋變得簡單

Solr

        Solr 是Apache下的一個頂級開源項目,采用Java開發,它是基于Lucene的全文搜尋伺服器。Solr提供了比Lucene更為豐富的查詢語言,同時實作了可配置、可擴充,并對索引、搜尋性能進行了優化。Solr通過使用類似REST的HTTP API,這就確定你能從幾乎任何程式設計語言來使用solr。

        其主要功能包括全文檢索,命中标示,分面搜尋,動态聚類,資料庫內建,以及富文本(如Word,PDF)的處理。Solr是高度可拓展的,并提供了分布式搜尋和索引複制。Solr可以和Hadoop一起使用。由于Hadoop處理大量資料,Solr幫助我們從這麼大的源中找到所需的資訊。不僅限于搜尋,Solr也可以用于存儲目的。像其他NoSQL資料庫一樣,它是一種非關系資料存儲和處理技術。

        Solr是一個可擴充的,可部署,搜尋/存儲引擎,優化搜尋大量以文本為中心的資料,是最流行的企業級搜尋引擎。

差別和聯系

        首先說明三者之間的一個聯系:

        solr 和 elasticsearch 都是基于 Lucene 實作的

        Solr 和 ElasticSearch 比較:

        Solr利用 Zookeeper 進行分布式管理,支援更多格式的資料(HTML/PDF/CSV) ,官方提供的功能更多在傳統的搜尋應用中表現好于 ES,但實時搜尋效率低。

        ES自身帶有分布式協調管理功能,但僅支援 json 檔案格式,本身更注重于核心功能,進階功能多有第三方插件提供,在處理實時搜尋應用時效明顯高于 Solr。

效率對比

Lucene,Solr,Elasticsearch之間的差別和聯系
Lucene,Solr,Elasticsearch之間的差別和聯系
Lucene,Solr,Elasticsearch之間的差別和聯系

結論

        Solr比較成熟,有一個更大,更成熟的使用者、開發和貢獻者社群,而 Elasticsearch相對開發維護者較少,更新太快,學習使用成本較高。具體選擇哪一項技術,還需要根據不同的場景來進行結合選擇。

繼續閱讀