全文搜索屬於最多見的需求,開源的 Elasticsearch 是目前全文搜索引擎的首選。html
基於Lucene它能夠快速地儲存、搜索和分析海量數據。維基百科、Stack Overflow、Github 都在採用它。java
另外一個選擇是Solr,一樣基於Lucene,Solr比ElasticSearch早幾年面世,因此相對於Elasticsearch 更成熟和穩定。數據庫
Elasticsearch 是一個開源的搜索引擎,創建在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。apache
它使全文檢索變得簡單, 經過隱藏 Lucene 的複雜性,取而代之的提供一套簡單一致的 RESTful API。編程
Elasticsearch 不只僅只是一個全文搜索引擎。 還具備以下功能:負載均衡
能夠把ElasticSearch當作是一個搜索引擎數據庫,有數據庫知識便可快速入門框架
一、維基百科elasticsearch
二、Stack Overflow(國外的技術問答論壇)分佈式
三、GitHub(開源代碼管理),搜索上千億行代碼ide
四、電商網站,檢索商品
五、日誌數據分析,logstash採集日誌,ES進行復雜的數據分析(ELK技術,elasticsearch+logstash+kibana)
主要用於近實時的全文搜索和數據分析
Apache Solr基於業界大名鼎鼎的java開源搜索引擎Lucene,Lucene更多的是一個軟件包,還不能稱之爲搜索引擎,而solr則完成對lucene的封裝,是一個真正意義上的搜索引擎框架。在過去的十年裏,solr發展壯大,擁有普遍的用戶羣體。solr提供分佈式索引、分片、副本集、負載均衡和自動故障轉移和恢復功能。若是正確部署,良好管理,solr就可以成爲一個高可靠、可擴展和高容錯的搜索引擎。很多互聯網巨頭在使用,如Netflix,eBay,Instagram和Amazon(CloudSearch)。
二者在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已經存在了更長的時間,因此它的生態系統是發達的,擁有更大的用戶羣。
-------------------------------
基於如下幾個緣由,建議使用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的差異