Solr vs. Elasticsearch誰是開源搜索引擎王者

Solr ElasticSearch NoSQL Lucene 小窗科技 2017-03-18

當前是雲計算和數據快速增長的時代,今天的應用程序正以PB級和ZB級的速度生產數據,但人們依然在不停的追求更高更快的性能需求。隨著數據的堆積,如何快速有效的搜索這些數據,成為對後端服務的挑戰。本文,我們將比較業界兩個最流行的開源搜索引擎,Solr和ElasticSearch。兩者都建立在Apache Lucene開源平臺之上,它們的主要功能非常相似,但是在部署的易用性,可擴展性和其他功能方面也存在巨大差異。

關於Apache Solr

Apache Solr基於業界大名鼎鼎的java開源搜索引擎Lucene,Lucene更多的是一個軟件包,還不能稱之為搜索引擎,而solr則完成對lucene的封裝,是一個真正意義上的搜索引擎框架。在過去的十年裡,solr發展壯大,擁有廣泛的用戶群體。solr提供分佈式索引、分片、副本集、負載均衡和自動故障轉移和恢復功能。如果正確部署,良好管理,solr就能夠成為一個高可靠、可擴展和高容錯的搜索引擎。不少互聯網巨頭,如Netflix,eBay,Instagram和Amazon(CloudSearch)均使用Solr。

solr的主要特點:

  • 全文索引
  • 高亮
  • 分面搜索
  • 實時索引
  • 動態聚類
  • 數據庫集成
  • NoSQL特性和豐富的文檔處理(例如Word和PDF文件)

關於Elasticsearch

與solr一樣,Elasticsearch構建在Apache Lucene庫之上,同是開源搜索引擎。Elasticsearch在Solr推出幾年後才面世的,通過REST和schema-free(不需要預先定義 Schema,solr是需要預先定義的)的JSON文檔提供分佈式、多租戶全文搜索引擎。並且官方提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript客戶端。

分佈式搜索引擎包含可以華為為分片(shard)的索引,每一個分片可以有多個副本(replicas)。每個Elasticsearch節點可以有一個或多個分片,其引擎既同時作為協調器(coordinator ),將操作轉發給正確的分片。

Elasticsearch可擴展為準實時搜索引擎。其中一個關鍵特性是多租戶功能,可根據不同的用途分索引,可以同時操作多個索引。

Elasticsearch主要特性:

  • 分佈式搜索
  • 多租戶
  • 查詢統計分析
  • 分組和聚合

熱度對比

Solr vs. Elasticsearch誰是開源搜索引擎王者

在開始比較前,我們可以查看兩者在google中的搜索熱度,可以看出在2013年後,Elasticsearch與Solr相比具有很大的吸引力,但這並不意味著Apache Solr已經死了。雖然不少人不認可,但Solr仍然是最流行的搜索引擎之一,具有強大的開源社區支持。

安裝與配置

相對來說,Elasticsearch更易於安裝,與Solr相比非常輕量級。 Solr的分發軟件包大小的當前版本(6.4.2)大約為150 MB,而Elasticsearch分發軟件包大小的當前版本(5.2.2)僅為32.2MB。

但是,如果Elasticsearch管理不好,這種易於部署和使用可能會成為一個問題。基於JSON的配置很容易,但如果你想為文件中的每個配置指定註釋,那麼它不適合你。Solr也提供了Rest API,可以通過集合API創建自定義分片集合,記錄聚類算法和執行自定義分片。

總的來說,如果你的應用程序使用JSON,那麼Elasticsearch是一個更好的選擇。否則,使用Solr,因為它的schema.xml和solrconfig.xml有很好的文檔。

索引和搜索

數據源

Solr接受來自不同來源的數據,包括XML文件,逗號分隔符(CSV)文件和從數據庫中的表提取的數據以及常見的文件格式(如Microsoft Word和PDF)。

Elasticsearch還支持其他來源的數據,例如ActiveMQ,AWS SQS,DynamoDB(Amazon NoSQL),FileSystem,Git,JDBC,JMS,Kafka,LDAP,MongoDB,neo4j,RabbitMQ,Redis,Solr和Twitter。還有各種插件可用。

搜索

Solr專注於文本搜索,而Elasticsearch則常用於查詢、過濾和分組分析統計,Elasticsearch背後的團隊也努力讓這些查詢更為高效。因此當比較兩者時,對那些不僅需要文本搜索,同時還需要複雜的時間序列搜索和聚合的應用程序而言,毫無疑問Elasticsearch是最佳選擇。

索引

兩者都支持使用停用詞和同義詞來匹配文檔。

在Solr中,索引間進行join必須是單個分片和其他節點上的副本集進行關聯來搜索文檔間關係(例如SQL連接)。而Elasticsearch提供更高效的has_children和top_children查詢來檢索這樣的相關文檔。

可擴展性和分佈式

搜索引擎需要處理數以百萬級的文檔,基於此搜索引擎應該是可複製的,模塊化的和可擴展的,支持集群和分佈式架構。

專為雲而設計

Elasticsearch非常易於擴展,擁有足夠多的需要大集群的使用案例。

Solr 基於Apache ZooKeeper也實現了類似ES的分佈式部署模式。ZooKeeper是成熟和廣泛使用的獨立應用程序。

相對比,Elasticsearch有一個內置的類似ZooKeeper的名為Zen的組件,通過內部的協調機制來維護集群狀態。

可以說Elasticsearch是轉為雲而設計,是分佈式首選。

分片拆分和再平衡

shards是luence索引的分區單元,solr和elasticsearch均使用。你可以通過在集群中的不同計算機上運行shard來分發索引。隨著SolrCloud的引入,Solr開始支持shard拆分,這允許您通過拆分現有shard來添加更多shard。相比之下,ElasticSearch仍然不支持這一點,事實上,實際上阻止了這種做法。ES通過向設置中添加更多計算機,可以使用自動碎片平衡功能。相比之下,Solr允許添加分片(使用隱式路由時)或分割(使用複合ID時),但不能刪除分片。它允許您增加副本。在Elasticsearch中,默認情況下每個索引具有五個分片。它不允許您更改主分片的數量,但它允許您增加副本的數量。分片再平衡對於水平擴容非常有用。當添加新機器時,它將自動重新平衡不同機器中可用的分片。

社區

Solr有一個廣泛的開源社區。任何人都可以貢獻給Solr,新的Solr開發人員或代碼提交者只能根據功能選擇。 Elasticsearch在技術上是開源的,但不完全。所有貢獻者都可以訪問源代碼,用戶可以進行更改並提供。但最終的變化由Elastic(運行Elasticsearch和其他軟件的公司)的員工確認和完成。因此,Elasticsearch更多地由單個公司驅動,而不是整個社區。

Solr貢獻者和提交者跨越多個組織,而Elasticsearch提交者僅來自Elastic。還有人指出,Solr的強大社區有一個健康的項目管道和許多知名公司參與。這些成員還通過在整個開發和工程過程中做出貢獻來投資該平臺。

兩者都有很好的用戶群和豐富的開發人員社區,但ElasticSearch相較於Solr更新。 Solr已經存在了更長的時間,所以它的生態系統是發達的,擁有更大的用戶群。

文檔

Solr在這裡得分很高。它是一個非常有據可查的產品,具有清晰的示例和API用例場景。 Elasticsearch的文檔組織良好,但它缺乏好的示例和清晰的配置說明。

選Solr 還是 Elasticsearch?

通過上面的對比,很難確定誰是最終贏家。其實,無論選擇Solr還是Elasticsearch,你首先需要了解您的用戶場景和未來的需求。我們來總結一下:

Solr vs. Elasticsearch誰是開源搜索引擎王者

請記住:

  • Elasticsearch由於其易用性而在較新的開發人員中更受歡迎
  • 但是如果你已經在使用solr了,請繼續使用它,因為遷移到Elasticsearch並不會帶來具體的優勢
  • 如果您需要它來處理分析查詢以及搜索文本,Elasticsearch是更好的選擇,特別是收集日誌,做分析處理(參考前面發的ELK 安裝使用http://www.cnblogs.com/xiaoqi/p/elk-part1.html)

總之,兩者都是功能豐富的搜索引擎,並且或多或少地給出相同的性能,只要它們被設計和實施得很好。

本文主要內容為翻譯http://logz.io/blog/solr-vs-elasticsearch/,感謝作者,感謝谷歌翻譯!

相關推薦

推薦中...