概述:
Apache Solr是一個用JAVA語言構建在Apache Lucene項目上的開源的企業級搜索平臺。主要特性包含:全文搜索、命中高亮、片斷式搜索、實時索引、動態集羣、數據庫集成、NoSQL特性和富文本處理。提供分佈式搜索和索引複製,設計時便充分考慮了擴展和容錯能力。Solr目前是第二流行的企業級搜索引擎,第一是ElasticSearch。
Solr做爲一個獨立的全文本搜索服務器運行。在內部使用JAVA開發的Lucene完成全文本索引和查詢,提供RESTful API完成對大多數編程語言的支持。靈活的外部配置使得能夠不用編寫任何的JAVA代碼就能完成工做,同時還提供了插件式的架構來支持更爲高級的用戶定製。
既然這麼強大,那它在咱們的總體平臺中處於一個什麼樣的位置?
定位:
下圖來自於官方手冊的一個例子。
上圖中,Solr運行在其餘的服務器應用程序以外。拿倉庫平臺系統來講,咱們要提供一些用戶界面:例如,能夠發起入庫的界面,能夠查看庫存的界面,能夠發起出庫的界面,做爲庫管,可能還須要對不正確的物資信息進行調整。不管入庫、出庫、查看庫存等哪一個功能,都是圍繞着物資展開的。這些信息會同時存在於平臺系統的數據庫中和Solr系統中,只不過可能會由於存放在不一樣系統中所要達到的目的和用處不同,信息的格式和完整度也會有(或沒有)差別。
由於有了Solr,咱們在倉儲平臺中提高搜索體驗也變得更加容易。只需經過以下步驟:
一、定義Schema。Schema告知Solr將要創建索引的文件內容。以倉儲平臺爲例,Schema中可能須要爲物資名稱、編碼、庫存量、生產廠商等定義字段。Solr的Schema強大而有彈性,而且容許你爲你的應用系統定義特有的Solr行爲。
二、發佈Solr。
三、爲用戶將要檢索進行的檢索提供Solr文件。
四、在應用程序裏實現檢索功能。
Solr創建在開發標準之上,所以具備很高的可擴展性。Solr的查詢基於RESTful,也就是說,一個查詢的本質就是一個簡單的HTTP請求URL和一個結構化的響應文檔。響應文檔的結構主要包含:XML、JSON、CSV,還有其餘格式 。這也意味着,大量的客戶應用程序可使用Solr,好比WEB應用、富客戶端應用和移動設備。任何支持HTTP協議的平臺都能和Solr進行交互。
Solr基於Apache Lucene項目,一個高性能、全特性的搜索引擎。Solr支持簡單的關鍵字查詢,複雜的多字段查詢,以及將結果分片斷。
擴展性:
若是單個Solr的能力不夠可觀,那麼它處理很是大量應用程序的能力將能達到理想效果。
比較常見的場景是:你有大量的數據或者不少的查詢,一個單一的Solr服務器沒法處理全部的工做負荷。在這種狀況下,可使用SolrCloud來擴展Solr的能力,使得其在多臺服務器間能得到更好的分發數據、處理請求的能力。基於你須要得到的擴展能力,大量不一樣的配置選項須要組合使用。
例如:分片就是一種擴展方式,它把一個大的集合劃分紅多個稱爲"分片"的邏輯塊,從而提升一個集合中的文檔數量使超過一個單一Solr服務器所容許的物理限度。進入系統的查詢會被分發到集合裏的每個分片,而後返回合併的結果。另外一種可用的技術是提高集合的「複製因子」,它容許你使用集合的副本添加額外的服務器,經過在多臺機器之間傳播高併發的查詢命令來完成工做。分片和複製並不是互不相容的,組合使用能使Solr變成一個更增強大和可擴展的平臺。