4 功能概覽正則表達式
最後, 讓咱們再按照下面的分類,快速的過一下Solr的主要功能:數據庫
·用戶體驗安全
·數據建模服務器
·Solr 4的新功能網絡
在本書中,爲你的用戶提供良好的搜索體驗會一直貫穿全書的主題。因此咱們就從用戶體驗開始,看看Solr是如何讓你的用戶感受到爽的。架構
4.1 用戶體驗類功能併發
Solr提供了一系列的重要功能來幫助你搭建一個易用的,符合用戶直覺的,功能強大的搜索引擎。不過你須要注意的是Solr僅僅是提供了類REST風格的HTTP API接口,她並不提供搜索界面相關的UI組件和框架。你須要捲起袖子來寫一個你本身的搜索界面UI,能夠充分的利用如下列出的用戶體驗類功能:框架
·分頁和排序功能分佈式
·分類檢索功能高併發
·自動補全功能
·拼寫檢查功能
·高亮命中結果功能
·地理位置查詢功能
分頁和排序功能
Solr 不會返回全部符合查詢條件的結果。Solr在分頁請求查詢結果方面作了優化,每次只有最靠前的N個文檔會被在請求第一頁結果時返回。若是用戶在第一頁結果中沒有找到想要的信息,那麼能夠經過很簡單的API調用和請求參數得到後續頁碼的內容。分頁功能對於兩類關鍵的輸出有幫助:1)結果返回的更快了,由於每次查詢都只須要返回整個搜索結果中的一個很小的集合; 2)能夠幫助你追蹤到底有多少請求是針對更多頁碼內容的。這個指標能夠反映出你的相關性得分的計算是否有問題。你會在第7章中詳細的瞭解到分頁和排序相關的內容。
分類檢索功能:
分類檢索功能將搜索結果按照特性分類放到一個個小組中,這就爲爲用戶提供了一個不斷優化搜索關鍵字和瀏覽搜索結果的工具。在咱們的房地產搜索例子中(圖1.1), 咱們看到了用戶經過基本的查詢關鍵字搜索到的結果被組織到了三個分類中:房屋特徵, 房型, 和列表類型。分類檢索功能是Solr很受歡迎的強大功能之一,咱們在第8章中會詳細討論分類檢索。
轉載請註明原文出處http://my.oschina.net/fengnote
自動補全功能
大多數用戶都會期待你的搜索應用在輸入的信息不完整的狀況下仍然可以正確的返回結果。自動補全功能會根據系統索引文件中的文檔內容在用戶輸入關鍵詞的時候作出相應的自動填補建議。Solr的自動補全功能使得用戶只須要輸入少數幾個字符就能獲得一個根據這些輸入字符推薦出來的查詢詞列表。這能大大下降用戶輸入錯誤查詢詞的概率,尤爲是如今不少用戶都會在移動設備上用小鍵盤輸入搜索內容。
自動補全功能給用戶提供了可選的查詢詞示例。回到咱們的房地產搜索應用例子上,當用戶輸入」hig「時,Solr的自動補全功能會返回:highlands neighborhood 或者 highlands ranch 這樣的可用查詢詞。咱們會在第十章中詳細的介紹自動補全功能。
拼寫檢查
在這個移動設備的時代和人人都很忙的時代,拼寫檢查功能顯得尤其重要。用戶在輸入帶有拼寫錯誤的查詢詞時,仍然會期待搜索引擎可以優雅的自動處理掉這些小錯誤,返回給用戶正確的查詢結果。Solr的拼寫檢查支持兩種基本的模式:
自動糾錯模式:Solr能夠在用戶出現拼寫錯誤的時候自動根據該詞語在索引中是否存在而作出相應的糾錯處理
」您要找的是否是…「功能: Solr也能夠根據用戶的輸入,爲用戶建議一個更佳的輸入方案,好比當用戶輸入」hilands「時,solr會建議用戶」您要找的是否是 highlands?「
拼寫檢查功能在Solr 4中作了很大改進,咱們會在第10章中作詳細的討論。
高亮命中結果功能
在搜索文本量比較大的文檔時,你能夠經過Solr的高亮命中結果功能對命中的內容進行高亮顯示。這在文本內容很長的文檔中很實用,用戶能夠藉此功能很方便的在長長的文本內容中一眼找到命中的搜索內容部分。咱們會在第9章中詳細討論高亮命中功能。
地理位置搜索功能
地理位置搜索是Solr 4 中的一個很棒的功能,Solr 4 自建了對經度值和緯度值的索引支持, 能夠對文檔按照地理位置的遠近作出排序。Solr 能夠根據到地理位置上某一點(某一具體的經度和緯度上的一點)的距離,查找出相應的文檔記錄並對結果排序。在咱們的房地產應用例子中,匹配出來的房源結果能夠在互動地圖上根據用戶的縮放和中心店的移動作地理位置查詢,按照與中心點的距離遠近對查詢結果排序。
Solr 4中另外一個激動人心的功能是你甚至能夠經過在地圖上畫出各類幾何圖形,好比多邊形,根據不一樣形狀之間的交集來作地理位置查詢。這在你想要在查找房源的時候可以指定具體的街區地理範圍時會頗有用。咱們會在第14章中討論Solr的地理位置查詢功能。
4.1.2 數據建模類功能
正如咱們在第1.1節中討論的那樣,Solr對特定類型的數據處理作了優化。在本節中,咱們列出了你在爲搜索創建數據模型時可能會用到的一系列關鍵功能,包括:
· 值域的合併和分組功能
· 靈活的查詢支持功能
· 鏈接功能
· 歸集功能
· 從PDF和word等格式的文檔中導入富媒體數據的功能
· 從關係型數據庫中導入數據的功能
· 多種語言的支持
· 值域的合併和分組功能
雖然Solr要求處理的文檔儘可能的扁平化、非規格化,但仍是容許你將多個文檔按照你們共有的某種屬性進行歸組管理。值域分組,也被稱爲值域的合併,容許你在返回結果時除了能夠返回一個個的文檔以外還能夠返回一個特定的文檔分組。
關於值域分組功能的一個經典的例子就是郵件列表,咱們能夠把全部符合查詢條件的同一主題的郵件都附在以最先引起會話的那封郵件開頭的一個郵件列表裏返回給用戶。你將會在第11章中學到更多的關於值域分組的內容。
· 強大而靈活的查詢支持功能
Solr提供了一系列強大的查詢功能,包括:
· 支持與(and), 或(or),非(not)的條件邏輯
· 支持通配符匹配
· 支持日期和數字的範圍查詢
· 支持模糊的短語查詢
· 支持模糊字串匹配
· 支持正則表達式匹配
· 支持功能查詢
若是你對其中的一些名詞不熟悉沒有關係,咱們會在第7章中深刻討論。
· 鏈接功能
在SQL中你可使用JOIN來建立一個連接關係,將兩張或多張表之間的數據經過一個稱之爲Foregn Key的共有屬性鏈接起來。可是在Solr中,join操做更像是SQL中的子查詢,只是你並不會經過連接文檔之間的數據而建立新的文檔。例如,經過Solr的join功能, 你能夠返回父文檔符合查詢條件的子文檔。Solr鏈接功能在你須要拿到某條推特或是微博的全部評論時頗有用,全部評論都是原文的子文檔。咱們會在第14章中詳細討論該功能。
· 文檔歸集
文檔歸集功能容許能夠根據每一個文檔的描述將類似的文檔歸爲一組。
這有助於避免在返回查詢結果時返回不少內容很近似的文檔結果。例如,若是你的搜索引擎是一個新聞應用,經過多個RSS連接來推送文章,那麼你極可能會同時收到不少關於同一條新聞的報道。把這些內容差很少的報道都返回給用戶顯然不是一個好主意,此時你可使用文檔歸集功能把這些相似的報導分紅一組,選取一篇有表明性的報道返回給用戶就妥了。歸集技術會在第17章作詳細討論。
· 從PDF和word等格式的文檔中導入富媒體數據的功能
在某些場合下,你可能須要處理一些已有的通用格式文檔,好比PDF和微軟word文檔之類的,你須要這些文檔也能被檢索。用Solr的話要實現這一點很簡單,由於Solr直接集成了Apache Tika項目,該項目幾乎支持全部的流行文檔格式。導入富媒體文檔的相關問題在第12章中會詳細討論。
· 從關係型數據庫中導入數據的功能
若是你想要搜索的數據是存儲在傳統的關係型數據庫當中的,那你能夠配置Solr來經過SQL查詢語句建立文檔。咱們在第12章中會具體討論如何使用Solr的數據導入接口(DIH)
· 多種語言的支持
Solr和Lucene對多語言環境的支持已經發展了很長一段時間了。Solr內建了一個語言自動檢測系統,對多種不一樣的語言環境都提供特定語言的文本分析方案支持。咱們在第6章會了解到相關的詳細內容。
4.1.3 Solr 4的新功能
在咱們結束本章以前,讓咱們來看看Solr 4爲咱們帶來了哪些新的功能。整體來講第4版對於Apache Solr社區來講是一個重大的里程碑,一會兒解決掉了Solr用戶多年來在使用中發現的各類痛點和不方便的地方。咱們選了幾個功能亮點列在這裏, 不過須要指出的是Solr4的各類新功能會貫穿本書的各個章節。
· 幾乎實時的搜索查詢
· 支持樂觀併發機制的原子更新
· 實時獲取功能
· 事務日誌的持久層寫入
· 使用Zookeeper輕鬆的進行分片操做和複製操做
轉載請註明原文出處http://my.oschina.net/fengnote
• 近乎實時的搜索查詢
Solr的近乎實時(NRT)查詢功能支持應用在索引創建以後幾秒鐘就能夠查詢到新加入的文本。因此利用NRT功能,Solr徹底能夠應付內容更新會很快的場景,好比頭條新聞或是社交網絡之類的應用。咱們在第13章會詳細討論NRT。
· 支持樂觀併發機制的原子更新
原子更新功能容許客戶端應用能夠對現有文檔的值域作添加、更新、刪除或是增長等操做而並不用從新發送整個文檔給Solr。例如,若是1.2節中咱們的房地產搜索示例裏房屋的價格發生了變化,那麼咱們能夠簡單地發送一個原子更新到Solr更新該條房屋記錄的價格便可,不用從新發送整條房屋記錄的信息。
你可能疑惑若是兩個不一樣的客戶端用戶試圖同時更新同一條文檔記錄時會怎麼樣。在這種狀況下,Solr會使用樂觀併發機制來避免會產生衝突的更新。簡言之,Solr會用一個特定的叫作_Version_的值域來增強文檔更新過程當中的安全性。當兩個不一樣用戶試圖同時更新同一文檔時,最後提交更新的用戶會獲得過時版本的數據,因此其更新請求會失敗。原子更新和樂觀併發機制的細節會在第12章中詳細討論。
· 實時獲取功能
在本章的開頭,咱們說明了Solr也屬於NoSQL技術的一種。Solr的實時獲取功能絕對符合典型的NoSQL方式,它可讓你經過文檔的惟一標識得到最新版本的文檔內容,徹底不須要考慮新版本的文檔內容是否提交到了索引當中。這一點和實用Key-value存儲方式的Cassandra很像,都是使用一個原始的key來獲取key對應的最新數據。
而在Solr 4版本以前,文本內容必須先要提交到Lucene索引文件中以後纔可以被訪問到。而利用Solr4的實時獲取功能,經過惟一標識獲取文檔內容的過程已經安全的同創建Lucene索引的過程分離開了。這在索引已經創建以後對文檔內容進行更新的時候頗有用,不用再從新提交文檔內容創建新的索引了。咱們在第5章會看到從新提交內容的開銷很大,會影響到查詢的性能。
·持久層寫入
當一個文檔被髮送到Solr進行索引的創建時,其內容會被寫入到一個事務日誌中,以免由於server故障而產生數據的丟失。Solr的事務日誌處於從客戶端應用發送文檔過來,到把文檔內容提交到Lucene索引文件之間的一箇中間狀態。它也參與實時獲取功能的實現,由於無論文檔是否已經提交到了Lucene索引文件中,其內容均可以經過惟一標識提取出來。
事務日誌使得Solr能夠將更新內容的持久化和更新內容的可見性分離開來。這意味着文檔可能會存在於持久化存儲中可是在搜索結果中並不可見。你本身的應用能夠靈活控制什麼時候將新的文檔內容提交到索引中從而使得新文檔內容在搜索時能夠被檢索到。而你並不用擔憂若是服務器在你提交索引以前掛掉的話新文檔內容會丟失的問題。咱們會在第5章討論持久層的寫入問題和提交策略問題。
· 使用Zookeeper輕鬆的進行分片操做和複製操做
若是你之前沒用過Solr,那你可能不會理解用以前老版本的Solr進行橫向擴展是多麼麻煩的一件事情。而有了SolrCloud以後,橫向擴展變得很簡單並且自動化了。由於solr使用了Apache Zookeeper來同步配置和管理主分片及分片的複製備份。在Apache的官方網站上是這樣描述Zookeeper的:」這是一個用於維護配置信息,命名,提供分佈式同步和分組服務的中心服務「。
在Solr中,Zookeeper負責指定主分片和分片的複製備份,而且負責監控服務器是否能夠正常的響應查詢請求。SolrCloud已經綁定了Zookeeper服務,因此你不須要再作額外的配置就能夠啓動SolrCloud。咱們會在第16章中詳細討論SolrCloud相關的內容。
5 總結
咱們但願如今你已經對Solr典型用例和支持的數據類型有了一個直觀的認識。正如你在1.1節中所學到的,Solr對4類數據的處理作了優化,包括以文本內容爲中心的數據,讀取遠勝於寫入的數據,面向文檔的數據,以及schema比較靈活的數據。咱們也學習到了相似Solr這樣的搜索引擎並非通用的數據存儲和處理方案, 而是用來處理關鍵詞搜索,對結果進行排序,以及幫助用戶在結果中瀏覽和發現更符合要求的信息用的。經過一個虛擬的房地產搜索應用,咱們瞭解到了Solr是如何在Lucene的基礎上創建索引的,是如何經過基於HTTP, XML和JSON等方式的網絡服務來配置管理索引創建規則的。Solr4能夠經過分片功能和複製擴展兩種機制來知足海量數據的高併發查詢需求。Solr4不會有單點失敗的問題。
咱們也分別站在公司不一樣角色的角度分別討論了選擇Solr能夠帶來的一些關鍵的好處。咱們看到了Solr是如何解決軟件架構師,系統管理員甚至是公司CEO所可能提出的疑問的。最後,咱們粗略的過了一遍Solr的主要功能,並提供了一個閱讀指南,讓你能夠迅速的找到感興趣的內容所在的章節。
咱們但願看到這裏你會很興奮的想要繼續學習Solr的旅程,那麼如今是時候去下載一個最新的Solr,在你本身的本地機器上運行一下了。在接下來的第二章,咱們就一塊兒來作這件事。