一、定義
apache solr 是乙個可擴充套件的,可快速部署的,對搜尋海量文字中心的資料和對返回結果做相關性排序方面做了優化的企業級搜尋引擎。
二、solr特點
三、適合用類似
solr
這樣的搜尋引擎來處理的資料的
4種主要特點
文字中心的資料:
你肯定見過有人用「非結構化資料
「這個術語來描述搜尋引擎處理的資料,我們認為
「非結構化
」這個詞有些模糊不清,因為任何乙個基於人類語言產生的文件都是隱含有一定的結構的。要理解
「非結構化
」這個術語你可以認為這是從計算機的角度來看的,在計算機眼中,文字文件就是乙個字元流,這個字元流必須通過特定的語言規則解析出語義結構,才能被檢索到,而這正是搜尋引擎的工作所在。
我們認為
「文字中心的資料
」這個詞更適合用來描述
solr
處理的資料型別。因為搜尋引擎的設計初衷就是用來提取文字資料的隱含結構,並生成相關索引以提高查詢檢索的效率。「文字中心的資料」這個詞隱含表明了文件中的文字資訊包含使用者感興趣的查詢內容。當然,搜尋引擎也支援非文字資料,比如數字型別的資料,但是其主要強項,還是在於處理基於自然語言的文字資料。
前面說的都是「文字」,其實「中心
」這個部分也很重要,因為如果你的使用者對於文字部分的內容不感興趣,那麼搜尋引擎可能就不是處理你的問題的最佳選擇。舉個例子,對於乙個給員工用來建立差旅支出報告的應用,每份報告都包括一些結構化的資料,比如日期,費用型別,匯率,數量等等,另外每項費用後面可能會包含一些備註資訊,用於描述該項費用的大致情況。這樣乙個應用就是乙個包含文字資訊,但並不是「文字中心的數」的乙個例子,因為會計部門在使用這些員工的支出費用報告來生成月度支出報告時,並不會通過查詢備註裡的文字資訊來做,文字在這裡並不是其關心的主要內容。簡單來說,就是不是所有包含文字資訊的資料都適合搜尋引擎來處理。
所以現在先花幾分鐘好好想想你的資料是否是「文字中心的資料
」。考慮的重點主要就是資料中的文字資訊使用者是不是會拿來做檢索。如果答案是
yes,那麼搜尋引擎很可能是乙個好的方案選擇。我們在第
5章和第
6章會討論如何利用
solr
的文字分析來提取文字資料的結構的細節。
讀取遠多於寫入的資料:
另外乙個搜尋引擎可以高效處理的資料特性是「讀取遠多於寫入的資料」。首先,需要宣告的是solr是允許你更新索引中的現有文件內容的。你可以把「讀取遠多於寫入」解讀為對於文件的讀取操作頻率要遠遠高於建立文件和更新文件的頻率。但是別狹隘的理解為你就完全不能寫入資料了,或是你會被限制在乙個特定頻率之下更新資料。事實上solr4的乙個關鍵特性就是「近乎實時的查詢」,這個功能可以允許你每秒鐘為數千的文件建立索引並且幾乎立刻就能查詢到這些新加入的文件。「讀取遠多於寫入的資料」背後的關鍵點是你的資料在寫入solr後,在其生命週期內應該是要被重複讀取很多次的。你可以理解為搜尋引擎並不是主要用來儲存資料的,而是主要用於查詢儲存的資料的(查詢請求是一種讀取操作)。所以如果你需要很頻繁的更新資料,那麼搜尋引擎可能不太適合你的需求,其他的nosql技術,比如cassandra,可能更適合你的快速隨機寫入的需求。
面向文件的資料:
靈活的schema:
最後乙個搜尋引擎資料的主要特性是有靈活的schema。這意味著查詢索引中的文件不需要擁有統一的結構。在關係型資料庫中,表中的每一行資料都必須擁有相同的結構。而在solr中,文件們可以有不同的值域。當然同乙個索引中的文件們至少應該擁有一部分大家都有的值域以便於檢索,但是並不要求所有文件中的值域結構完全一樣。舉個例子,假如要做乙個用於查詢出租和****的搜尋應用。顯然每條**文件都會有地段,房間數,衛生間數等一些共有的值域,但是根據型別是出租還是**的不同,不同的**文件會有不同的值域。一條**的**會有售價值域,財產稅值域,而一條出租的**文件則會有月租金和寵物政策等等不同的值域。
四、常見的搜尋引擎用例
1、基本的關鍵字查詢:
2、排序檢索結果:
五、搜尋引擎不適合做的事情
另乙個不適合應用搜尋引擎的使用場景是需要讀取索引檔案的大部分子集的才能完成的深度分析任務場景。即使你通過結果分頁技術避免了剛剛說的那個問題,如果一次分析需要讀取索引檔案中的大量資料,你也會遇到很大的效能問題,因為索引檔案的底層資料結構就不是為一次大量讀取來設計的。
我們前面有提到過一點,但是在這裡還是要再次強調一下,那就是搜尋引擎技術並不適合用於在文件的相互關係之間進行查詢。solr確實是可以支援基於父子關係的查詢,但是並不支援在複雜的關係型資料結構之間查詢。在第三章,你會學習到如何將關係型資料結構適配到適合solr處理的扁平型文件結構中進行查詢。
最後,絕大多數搜尋引擎都沒有直接的文件級安全支援,至少solr是沒有。如果你需要嚴格管理文件的許可權,那你只能在搜尋引擎之外來想辦法。
到這裡我們已經了解了適合搜尋引擎處理的用例場景和資料型別,下一步該是時候討論solr到底能做些什麼,以及這些功能是如何實現的了。在下一節中,你將學習到solr到底有哪些主要功能,以及她是如何實現外部系統整合、可擴充套件性、以及高可用性等軟體設計原則的。
Solr學習總結(一)Solr介紹
solr是乙個基於lucene的全文搜尋引擎,同時對其進行了擴充套件,提供了比lucene更為豐富的查詢語言,實現了可配置 可擴充套件並對查詢 效能進行了優化,更靈活的配置,更高的查詢效率。支援 xml http協議 支援 json api 介面 支援快取 複製 同時具有完善的web管理介面,是一款...
Solr學習總結(一)Solr介紹
公司裡用的都是solr但是自己只學了點lucene,對solr還是不夠了解,所以決定系統的學習下。solr是乙個基於lucene的全文搜尋引擎,同時對其進行了擴充套件,提供了比lucene更為豐富的查詢語言,實現了可配置 可擴充套件並對查詢效能進行了優化,更靈活的配置,更高的查詢效率。支援 xml ...
Solr學習總結(一)Solr介紹
公司裡用的都是solr但是自己只學了點lucene,對solr還是不夠了解,所以決定系統的學習下。solr是乙個基於lucene的全文搜尋引擎,同時對其進行了擴充套件,提供了比lucene更為豐富的查詢語言,實現了可配置 可擴充套件並對查詢效能進行了優化,更靈活的配置,更高的查詢效率。支援 xml ...