譯者按:本文是來自一家烏克蘭技術公司的文章。該文章譯者認爲着重在應用上,而非單純的性能對比。給本身的平臺選擇一個合適的搜索引擎比任何一個吹噓技術強大的好。雖然最近一兩年 ES發展飛速,但sphinx的簡單易用性仍是贏得不少機構公司的青睞,好比優酷土豆都是用sphinx。因此使用以前,務必先了解本身的業務訴求,再選擇合適的搜索引擎,而非一昧跟風。翻譯如有誤請指正,謝謝查看!html
編譯自:ELASTICSEARCH VS. SOLR VS. SPHINX: BEST OPEN SOURCE SEARCH PLATFORM COMPARISONgit
做者:Anna Klimenkogithub
從業務角度來看,您應該將高效的搜索引擎視爲一種強大的工具,可以提升轉換率併爲網站全部者帶來更多利潤。若是您的網站搜索機制沒有提供相關結果或搜索性能過低,用戶將離開網站並轉到其競爭對手。算法
那麼,什麼是高效的搜索引擎?數據庫
搜索的主要目的是檢索與用戶查詢最相關的匹配,排除網站上的其餘常規內容。apache
在當前搜索引擎中能夠得到的功能中,最受歡迎的是:api
[建議和突出顯示 彭博]瀏覽器
系統應該可以經過使用範圍(價格,日期,大小等),排序(按受歡迎程度,日期,價格)和過濾(僅包括所需參數)來縮小搜索範圍。緩存
當咱們談論信息動態變化的網絡應用程序(價格,描述細節,商品的可用性)時,近乎實時的更新是很是重要的; 例如,在電子商務或預訂引擎中顯示庫存中可用的商品和服務。安全
除了上面列出的通常功能外,引擎還能夠在查找用戶最感興趣的產品或信息時提供建議,以改善用戶體驗。
當前大約有20個搜索引擎可供選擇,可是,若是您正在爲您的Web應用程序尋找可靠而有效的解決方案,咱們建議您使用如下三種方法之一:Elasticsearch,Solr或Sphinx – 這是2018年最流行的三種引擎。
這三個都是開源搜索解決方案,獲得了他們的貢獻者社區的充分支持。它們都具備高性能,可擴展性和靈活性,且具備其特性。
咱們不會像Sphinx vs Solr,Solr vs Sphinx或Sphinx vs Elasticsearch那樣進行比較,由於它們都是不錯的競爭對手,具備幾乎相同的性能,可擴展性和功能。可是它們中的每個都具備特定的特性,能夠對您的項目產生影響。如今,讓咱們來看看哪一個選項對您的業務更有利。
Elasticsearch是2018年搜索引擎評級的絕對領導者,經過可以在任何環境中工做,證實了其真正「有彈性」的名稱。它是一種開源技術,使用的是Apache Lucene庫。
許多世界知名公司都將Elastic用於其應用程序。在這裏你能夠找到這樣的名字 TripAdvisor, Shopify, Mozilla, Foursquare, Etsy, Github, SoundCloud, eBay, Yelp, and Netflix, 等等。
1.近實時索引
Elasticsearch可以幾乎當即(在不到1秒內)快速索引快速變化的數據。在數據庫不斷更新的項目中使用它是合適的。
例如,在優步,Elasticsearch實時彙總動態(激增)訂價和供應定位的業務指標。它可以在高峯時間每秒處理超過1,000個查詢。
當數據庫增加時,查找起來就變得更加困難。可是當您的數據庫變大時,Elasticsearch會擴展,所以搜索速度不會下降。
Expedia的,最大的酒店和機票聚合之一,經過提供最高追求,天天1TB具備每秒300K的事件。在Elasticsearch的幫助下,他們成功地改善了客戶的預訂體驗。
ES不只能夠用做索引器,還能夠用做數據存儲器。儘管如此,咱們不建議將其用做主存儲,而且咱們仍然將數據保存在主數據庫中以得到更好的安全性和可靠性,僅使用ES來索引數據和存儲日誌。
例如, Florida.com,咱們的客戶之一和彙總佛羅里達度假村全部信息的應用程序,支持龐大的酒店,餐館,活動,景點,體育,交易等數據庫。使用Elasticsearch,咱們的數據庫中存儲的數據可快速編入索引並可搜索用戶馬上。
這是今天在ES中完美實現的時尚功能之一。Elastic Stack(ES,Logstash和Kibana插件的組合)是分析的絕佳工具。它容許實時監控應用程序上的流量(訪問者總數,惟一訪問者數量,IP地址,最多見的查詢,大多數請求的頁面,使用的設備和瀏覽器,按時間顯示的流量日誌等等) 。
此信息在儀表板中的彩色圖表,地圖和表格中可視化。這對於與分佈式團隊合做很是有幫助,由於每一個人均可以當即查看最新信息,而後使用這些數據更好地瞭解您的受衆並改進產品的內容和用戶體驗。
在ES的幫助下,The Guardian擁有一個強大的分析系統,天天可以處理4000萬個文檔,以建立內容消費的願景。
在Netflix,在高峯時段有800萬個事件和每秒24GB,ES用於視頻查看活動,UI活動,錯誤日誌,性能,診斷事件等事件的實時分析。
Elastic Stack也是一款出色的安全分析工具。近實時日誌分析和可視化使您能夠識別安全威脅(Web服務器出現問題,連接斷開,未經受權訪問的嘗試,攻擊位置等)。您能夠今後官方彈性視頻中瞭解更多信息。
經過遷移到ES,戴爾經過確保只有受權人員才能訪問其羣集來提升安全性。戴爾還將其服務器數量減小了25-30%。
Elasticsearch能夠受益於X-Pack商業插件提供的機器學習功能。機器學習算法專一於時間序列數據中的異常檢測和異常檢測。
Amazon Elasticsearch Service能夠快速輕鬆地進行設置,並在雲中運行和擴展Elasticsearch,而無需配置您本身的服務器。
雖然Elastic目前排名第一,但它仍然是一項年輕的技術。並不是全部想要的功能都是開箱即用的,許多功能須要經過自行擴展。例如,ES沒有「您是否是意味着什麼?」功能。
Solr是另外一個基於Apache Lucene的搜索引擎,所以它與Elasticsearch有許多共同的特性。可是,他們在建築方面仍然不一樣。
使用Solr的公司包括 Cnet, CitySearch, Bloomberg, Magento, Zappos, AOL, eTrade, Disney, Apple, NASA, MTV, 和其餘人。
Solr擁有很是棒的搜索功能,這使得該解決方案很是適合像Zappos這樣的電子商務網站,這些網站使用Solr搜索和導航150,000種鞋子和其餘產品。
Solr能夠開箱即用,具備高度可配置性(甚至超過Elasticsearch)的豐富的全文搜索功能。Solr支持各類建議器實現,突出顯示功能(在字段中輸入的單詞的可視指示)和拼寫檢查器/「你的意思是什麼?」(在ES中不存在)。
在Greenice,咱們在爲澳大利亞客戶開展項目時處理了Solr。他們的網站旨在交流小企業家之間的經驗。搜索功能包括突出顯示,建議和排序。
[圖片來自 SavvySME]
Solr是少數能夠閱讀豐富內容文檔的搜索引擎之一,包括PDF,Word,XML或純文本。
這很是適合須要查看網站內大量PDF或Word文件的項目(包括合同,簡歷,學習材料,電子書等)。
香蕉是一種可視化工具( Kibana的一個分支)適用於Solr,容許管理員動態監控儀表板中的事件和日誌。
例如,在銀行業務中,經理將可以檢索有關失敗交易的信息,而且幾乎「即時」找出每一個問題的緣由,極大地減小了手工工做。這也能夠減小對日誌的手動搜索。
索爾與合做 彭博,實施機器學習((Learning-to-Rank plug-in) 根據來自更復雜查詢的分數,使用文檔從新排名的概念。機器學習旨在爲用戶提供即時搜索最相關公司,人員和新聞的更好體驗。
Solr不如Elasticsearch快,而且最適合靜態數據(不須要頻繁更改)。緣由是緩存。在Solr中,緩存是全局的,這意味着,即便緩存中發生了最微小的變化,全部索引都須要刷新。這一般是一個耗時的過程。另外一方面,在彈性中,刷新是由段組成的。
Sphinx 在2018年的搜索引擎中排名第五,但它仍然是一種強大且流行的技術,在排名方面讓位於Elasticsearch和Solr。
Sphinx用於如此着名的系統中 Joomla.org, CouchSurfing.org, Wikimapia.org, Tumblr.com, 以及數百種其餘應用。
Sphinx近年來不斷髮展,已經可以提供近乎實時的搜索。它的速度包括超過500個查詢/秒對1,000,000個文檔,最大的索引編號估計爲250億個文檔。
Craigslist在Sphinx的幫助下,天天提供超過3億次查詢。它每個月的頁面瀏覽量超過500億。
Infegy使用Sphinx爲22億以上的Twitter,Facebook和各類博客文章編制索引,以提供富有洞察力的社交媒體監控和分析查詢。
Sphinx在分面搜索功能方面擁有豐富的經驗。
優酷土豆(好歹看到了一箇中國的應用^_^)是中國最大的視頻網站,它使用Sphinx進行多值屬性搜索,每個月向超過4億用戶提供內容,每秒峯值量爲15,000個查詢。
在Greenice,咱們最近使用Sphinx做爲電子商務計算機硬件商店。咱們對品牌,類型,用途,屏幕分辨率,矩陣,對角線,HDD容量,SSD容量等屬性實施了多值屬性搜索。
若是您須要常規搜索功能,而且不須要任何其餘功能,如數據可視化和分析,請使用Sphinx。與使用大量內存的Elasticsearch不一樣,使用有限的計算資源索引和查詢大量文檔很是快速和強大。
其中一個例子是Boardreader,其中Sphinx在37臺機器上索引多達160億個文檔。
Sphinx適用於結構化數據(預約義文本字段和非文本屬性),但它不是處理非結構化數據(DOC,PDF,MP3等)的項目的最佳選擇,由於它須要開發人員花費大量時間和努力配置。這與配置上的其餘困難一塊兒使得Sphinx的使用不如競爭對手。
如下是Elasticsearch與Solr vs. Sphinx的簡要比較:
Elasticsearch | Solr | Sphinx | |
搜索功能的類型 | 1.全文 2.自動完成建議 3.分面 4.多場 5.同義詞 6.模糊 7.地理空間 |
1.全文 2.自動完成建議 3.分面 4.多字段 5.同義詞 6.模糊 7.突出顯示 8.地理空間 9.拼寫檢查 |
1. 全文 2. 自動完成建議 3. 分面 4. 多字段 5. 同義詞(稱爲字形) 6. 地理空間 7. 突出顯示(稱爲片斷) 8. 拼寫檢查(稱爲qsuggest) |
實時索引 | 是 | 是 | 是 |
性能 | 高 | 高 | 高 |
可擴展性 | 高 | 高 | 高 |
數據方案 | 無架構* | 是的,可是動態* | 是 |
能夠存儲 | 是 | 是 | 沒有 |
數據可視化 | Elastic Stack (ES,Kibana和Logstash)容許 | Banana插件容許 | 沒有 |
機器學習 | 是 | 是 | 沒有 |
當您發如今網站中檢索查詢結果須要一段時間時,可能會對用戶體驗產生負面影響。
經過爲您的數據庫配備強大的搜索引擎,您的應用程序的性能將大幅提高。
當代搜索引擎提供複雜的功能,如建議,全文,分面,模糊搜索等,以得到更準確和相關的結果。
如您所見,Elasticsearch,Solr和Sphinx之間的差別很小。它們都實現了它們的主要目的 – 提供有效和快速的搜索。
在咱們處理不一樣項目的過程當中測試了許多搜索引擎,咱們如今主要使用Elasticsearch,由於它已證實它對大多數項目具備最佳品質。它快速,靈活且易於使用,不只提供快速和相關的搜索功能,並且能夠單獨做爲存儲手段。它很是適合在日誌中搜索數據以快速識別應用程序的問題,並實時可視化Web應用程序中正在發生的全部事情。
若是您已經在Solr或Sphinx上有一個項目,那麼將它轉移到Elasticsearch是沒有意義的。不管如何,最好依靠擁有最佳體驗而且對其中一個搜索引擎感受更溫馨的開發人員。因爲全部項目都是獨立的,咱們會仔細分析每一個請求,以便爲您的任務提供最合適的解決方案。