比較Solr和:主要區別是什么?
兩個搜索引擎都在迅速發展,因此,無需多說,以下是關于和Solr之間差異的最新信息:
7. 切分位置
一般來說,就建立索引和碎片的位置而言,是非常動態的。當某個動作發生時,它可以在集群周圍移動碎片——例如,當一個新節點加入或從集群中刪除一個節點時。我們可以通過使用感知標簽來控制碎片應該放在哪里和不應該放在哪里,我們還可以告訴使用API調用按需移動碎片。
Solr往往是更靜態的開箱。默認情況下,當Solr節點加入或離開集群時,Solr自己不做任何事情。但是,在Solr 7及以后版本中solr全文檢索實現原理,我們有了自動排序API:我們現在可以定義整個集群范圍的規則和特定于集合的策略來控制分片的位置,我們可以自動添加副本,并告訴Solr根據已定義的規則在集群中使用節點。
8. API
如果您了解 Solr或,您就會知道它們公開了HTTP API。
熟悉Solr的人都知道,為了從它獲得搜索結果,需要查詢一個已定義的請求處理程序,并傳遞定義查詢條件的參數。根據您選擇使用的查詢解析器的不同,這些參數將有所不同,但方法仍然是相同的——將一個HTTP GET請求發送給Solr以獲取搜索結果。
這樣做的好處是您不必局限于單一的響應格式—您可以選擇XML格式、格式的JSON格式以及其他一些由響應編寫器開發的格式來獲得結果。因此,您可以選擇對您和您的搜索應用程序最方便的格式。當然,Solr API不僅用于查詢,因為您還可以獲得關于不同搜索組件或控制Solr行為(例如集合創建)的一些統計信息。
那么呢?公開了一個可以使用HTTP GET、、POST和PUT方法訪問的REST API。它的API不僅允許查詢或刪除文檔,還允許創建索引、管理它們、控制分析并獲得描述當前狀態和配置的所有指標。如果您需要了解有關的任何信息,您可以通過REST API獲得它(我們在云中也使用它來獲取日志和事件)。
如果您習慣了Solr,那么有一件事在一開始可能會讓您感到奇怪——只能以JSON格式響應——例如,它沒有XML響應。和Solr之間的另一個大區別是查詢。在Solr中,所有查詢參數都是作為URL參數傳遞的,而在中查詢是JSON表示的。以JSON對象的形式結構化的查詢給了一個很大的控制權,可以控制應該如何理解查詢,以及返回什么結果。
9. 緩存
另一個很大的不同是和Solr的架構。為了不深入討論這兩個產品的緩存是如何工作的,我們只指出它們之間的主要區別。
讓我們從什么是分段開始。段是索引的一部分,由各種文件構建,大部分是不可變的,并且包含數據。當你建立數據索引時,會生成段,并且可以在段合并的過程中將多個較小的、已經存在的段合并為較大的段。
Solr具有全局,即一個片段的給定類型的單一緩存實例,用于其所有段。當單個段發生更改時,需要使整個緩存失效并刷新。這需要時間和硬件資源。
在中,緩存是每段的,這意味著如果只有一個段更改,那么只有一小部分緩存的數據需要無效和刷新。我們將很快討論這種方法的利弊。
10. 分析引擎
Solr非常大,有很多數據分析功能。我們可以從好的、舊的方面開始——第一個實現允許對數據進行切分以理解并了解它。然后是具有類似特性的JSON facet,但速度更快,占用內存更少,最后是基于流的表達式,稱為流表達式,它可以組合來自多個來源的數據(如SQL、Solr、facet),并使用各種表達式(排序、提取、計算重要術語等)對其進行修飾。
提供了一個強大的聚合引擎,它不僅可以像Solr遺留平面(facet)一樣進行一級數據分析但是也可以嵌套數據的分析(例如,計算平均價格為每一個產品類別在每個商店部門),但支持分析聚合結果,導致功能像移動平均計算。最后,雖然還處于實驗階段,但提供了對矩陣聚合的支持,它可以計算一組字段的統計信息。
11. 全文搜索功能
當然,Solr和都利用了接近實時的功能。這使得查詢可以在文檔被索引后立即匹配文檔。
在查看Solr代碼庫時,與全文搜索相關的特性和接近全文搜索的特性非常豐富。
我們的Solr培訓班上就滿是這種東西!從廣泛的請求解析器選擇開始,通過各種建議器實現,到使用拼寫檢查器糾正用戶拼寫錯誤的能力,以及高度可配置的廣泛突出顯示支持。
有專門建議案API隱藏了實現細節的用戶給我們一個更簡單的方法實現建議的成本降低靈活性和當然強調不如強調可配置在Solr(雖然都是基于高亮顯示功能)。
Solr仍然更加面向文本搜索。另一方面,通常用于過濾和分組(分析查詢工作負載),而不一定用于文本搜索。
開發人員在和級別上都投入了大量精力來提高查詢效率(降低內存占用和CPU使用)。
12. 友好
如果你問一個人員,他喜歡的哪些方面,答案可能是它的API、可管理性和易于安裝。當涉及到故障排除時,很容易獲得關于其狀態的信息——從磁盤使用情況信息,通過內存和垃圾收集工作統計數據,到內部的緩存、緩沖區和線程池使用情況。
Solr還沒有到那一步——您可以通過JMX MBean和新的Solr API從它那里獲得一些信息,但這意味著您必須查看一些地方,并不是所有的東西都在那里,盡管它正在到達那里。
13. 非平面數據處理
你有非平面數據,在一個嵌套對象中有很多嵌套對象在另一個嵌套對象中你不想讓數據變得扁平,而只是索引你漂亮的 JSON對象并準備好全文搜索?將是實現這一目標的完美工具,它支持對象、嵌套文檔和父子關系。Solr可能不是最適合這里的,但請記住,在索引XML文檔和JSON時,它還支持父-子文檔和嵌套文檔。此外,還有一件非常重要的事情—Solr支持不同集合內部和跨不同集合的查詢時間連接,因此您不受索引時間父-子處理的限制。
14. 查詢DSL
我們大聲說,的查詢語言真的很棒。如果你喜歡JSON,那就是。它允許您使用JSON構造查詢,因此它將具有良好的結構并使您能夠控制整個邏輯。您可以混合不同類型的查詢來編寫非常復雜的匹配邏輯。當然,全文搜索不是一切,你可以包括聚合,結果崩潰等等-基本上你需要從你的數據的一切都可以用查詢語言表達。
在Solr 7之前,Solr仍然在使用URI搜索,至少在其最廣泛使用的API中是這樣。所有參數都進入了URI,這可能導致長且復雜的查詢。從Solr 7開始,JSON API部分得到了擴展,現在可以運行結構化查詢來更好地表達您的需求。
15. 索引/收集領導人控制
當談到集群周圍的切分位置時,本質上是動態的,但對于哪些切分將充當主切分,哪些切分將作為副本,我們并沒有太多的控制權。這是我們無法控制的。
與相比,在Solr中,你有這種控制,這是一件很好的事情,當你考慮到在索引期間,領導者做了更多的工作,因為他們把數據轉發給所有的副本。通過對碎片位置的精確信息,我們能夠重新平衡碎片的位置,或者明確地指出它們應該放在哪里,這樣我們就能夠在整個集群中平衡負載。
16. 機器學習
Solr中的機器學習以一種模塊的形式免費提供,并建立在流聚合框架之上。通過使用模塊中的其他庫,您可以在Solr之上使用機器學習的排序模型和特征提取,而基于流聚合的機器學習主要關注使用邏輯回歸的文本分類。
另一方面,我們有和它的X-Pack商業產品,附帶一個插件,支持機器學習算法,專注于異常檢測和時間序列數據中的離群點檢測。這是一套捆綁了專業服務的不錯的工具,但價格相當昂貴。因此,我們對X-Pack進行了拆解,并列出了可用的X-Pack替代品:來自開源工具、商業替代品或云服務。
17. 生態系統
說到生態系統,Solr附帶的工具很好,但它們讓人感覺很謙虛。我們有一個叫做的端口,它走自己的路,還有像 這樣的工具,它允許在 Solr上運行SQL。當然,還有其他工具可以從Solr讀取數據、將數據發送到Solr或使用Solr作為數據源—例如Flume。大多數工具都是由各種愛好者開發和支持的。
相比之下,如果你看看周圍的生態系統,它是非常現代和有序的。你有一個新版本的,每個月都有新功能出現。如果你不喜歡,你有,它現在是一個提供多種功能的產品,你有一長串的數據傳送者和工具可以使用作為數據源。最后,這些產品不僅得到了愛好者的支持,還得到了大型商業實體的支持。
18. 指標
如果你喜歡監控和測量,那么有了,你將會感覺非常棒。除夕夜,它比你能擠進時代廣場的人還要多!Solr提供了關鍵指標,但遠不及那么多。無論如何,如果您想處理指標和其他操作數據,那么擁有像 Cloud這樣全面的監控和集中的日志記錄工具是非常必要的,尤其是當它們像這兩者一樣無縫地協同工作時。
綜上所述,以下是Solr和之間的主要區別:
呢?
由于Solr和都基于 ,您可能想知道是否使用純會更好。可以這樣想:是Linux內核,而Solr或是。
您可以直接使用內核并在其上構建自己的應用程序。如果您對內核有很好的理解,并且用例比較狹窄,那么這將是您的選擇。同樣,是一個用Java編寫的搜索引擎庫。你可以在它上面寫你自己的搜索引擎(用Java),你可以完全控制做什么。
就像內核的例子一樣,如果你不熟悉,可能會花費很長時間和大量的試驗和錯誤。但是假設你知道。如果您有廣泛的用例,比如需要使您的搜索引擎分布式solr全文檢索實現原理,那么您可能最終會得到一個解決方案,它可以完成Solr和已經完成的工作。
Solr和都提供了最有用的功能——盡管不是全部!- 功能通過一個REST API。就像對Linux所做的一樣,Solr和在上面添加了它們自己的功能。比如分布式模型、安全性、管理api、復雜分析(方面、流聚合)等等。大多數用例都需要這種功能。
Solr和。給我總結一下:哪個是最好的?
這顯然不是Solr和不同之處的詳盡列表,當然也不是要告訴您選擇哪一個。我們可以繼續寫幾篇博客文章,然后把它寫成一本書,但希望下面的列表能讓你知道從其中一篇和另一篇中可以期待什么,這樣你就可以根據你的需要來看待它。
總之,以下是我們認為對那些不得不做出選擇的人來說影響最大的幾點:
本文:
討論:請加入知識星球【首席架構師圈】或者微信小號【】或者QQ群【】
(此處已添加圈子卡片,請到今日頭條客戶端查看)