Elasticsearch vs Solr 搜索引擎對比和選型

前言

全文搜索屬於最多見的需求,開源的 Elasticsearch 是目前全文搜索引擎的首選。html

基於Lucene它能夠快速地儲存、搜索和分析海量數據。維基百科、Stack Overflow、Github 都在採用它。java

另外一個選擇是Solr,一樣基於Lucene,Solr比ElasticSearch早幾年面世,因此相對於Elasticsearch 更成熟和穩定。數據庫

 

ElasticSearch簡介

Elasticsearch 是一個開源的搜索引擎,創建在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。apache

它使全文檢索變得簡單, 經過隱藏 Lucene 的複雜性,取而代之的提供一套簡單一致的 RESTful API。編程

Elasticsearch 不只僅只是一個全文搜索引擎。 還具備以下功能:負載均衡

  • 一個分佈式的實時文檔存儲,每一個字段 能夠被索引與搜索
  • 一個分佈式實時分析搜索引擎
  • 能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據

能夠把ElasticSearch當作是一個搜索引擎數據庫,有數據庫知識便可快速入門框架

 

ElasticSearch應用場景

一、維基百科elasticsearch

二、Stack Overflow(國外的技術問答論壇)分佈式

三、GitHub(開源代碼管理),搜索上千億行代碼ide

四、電商網站,檢索商品

五、日誌數據分析,logstash採集日誌,ES進行復雜的數據分析(ELK技術,elasticsearch+logstash+kibana)

主要用於近實時的全文搜索和數據分析 

 

Solr簡介 

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

 

ElasticSearch vs Solr 

熱度對比

二者在google中的搜索熱度,在2013年後,Elasticsearch與Solr相比具備很大的吸引力,但Solr仍然很流行,Solr具備強大的開源社區支持。

 

安裝與配置

相對來講,Elasticsearch更易於安裝和配置,學習成本更低。Solr的安裝和配置比ElasticSearch要複雜一些。

 

索引和搜索

數據源

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天生就是分佈式的,是轉爲雲而設計,是分佈式首選。

社區

Solr有一個普遍的開源社區。任何人均可以貢獻給Solr,新的Solr開發人員或代碼提交者只能根據功能選擇。

Elasticsearch在技術上是開源的,全部貢獻者均可以訪問源代碼,用戶能夠進行更改並提供。但最終的變化由Elastic(運行Elasticsearch和其餘軟件的公司)的員工確認和完成。所以,Elasticsearch更多地由單個公司驅動,而不是整個社區。

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

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

 

選Solr 仍是 Elasticsearch?

  • Elasticsearch因爲其易用性而在較新的開發人員中更受歡迎
  • 可是若是你已經在使用solr了,請繼續使用它,由於遷移到Elasticsearch並不會帶來具體的優點
  • 若是您須要它來處理分析查詢以及搜索文本,Elasticsearch是更好的選擇,特別是收集日誌,作分析處理

 

-------------------------------

另一篇文章的關於Elasticsearch和Solr的性能比較

 

 

 

結論

基於如下幾個緣由,建議使用ElasticSearch

一、易於安裝和配置,學習和使用成本較低(ElasticSearch入門簡單,只要有數據庫和編程知識,solr略複雜);

二、支持單機也支持分佈式,內置了分佈式組件,下降了學習和使用成本(Solr經過Apache ZooKeeper實現分佈式,須要額外的學習成本);

三、除了搜索以外,ElasticSearch還支持實時的過濾、分析、統計功能,能夠爲咱們後續的功能擴展提供支持;

四、在建立索引的同時進行搜索,ElasticSearch比Solr更優,而咱們的場景須要實時的建立索引(Solr建立索引的時候會堵塞IO);

五、隨着數據量增長ElasticSearch無明顯的性能損失(Solr會明顯變慢);

 

 

 

參考資料

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

http://www.javashuo.com/article/p-vawaofou-n.html

 

ElasticSearch和solr的差異

http://www.javashuo.com/article/p-qdkostkf-dv.html

相關文章
相關標籤/搜索