在 Solr 中搜尋

Solr 為搜尋提供了豐富且彈性的功能組合。為了了解這種彈性的程度,最好先概觀 Solr 搜尋中涉及的步驟和元件。

當使用者在 Solr 中執行搜尋時,搜尋查詢會由請求處理器處理。請求處理器是一個 Solr 外掛程式,定義 Solr 處理請求時要使用的邏輯。Solr 支援各種請求處理器。有些是設計用來處理搜尋查詢,而其他的則管理索引複製等任務。

搜尋應用程式預設會選擇特定的請求處理器。此外,可以設定應用程式,讓使用者可以覆寫預設選擇,偏好不同的請求處理器。

為了處理搜尋查詢,請求處理器會呼叫查詢剖析器,後者會解譯查詢的詞彙和參數。不同的查詢剖析器支援不同的語法。Solr 的預設查詢剖析器稱為標準查詢剖析器,或更常見的「lucene」查詢剖析器。Solr 也包含DisMax 查詢剖析器擴展 DisMax (eDisMax) 查詢剖析器

標準查詢剖析器的語法允許在搜尋中具有更高的精確度,但 DisMax 查詢剖析器對於錯誤的容忍度高得多。DisMax 查詢剖析器旨在提供類似 Google 等熱門搜尋引擎的體驗,這些搜尋引擎很少向使用者顯示語法錯誤。擴展 DisMax 查詢剖析器是 DisMax 的改良版本,可以處理完整的 Lucene 查詢語法,同時仍能容忍語法錯誤。它還包含幾個額外的功能。

此外,所有查詢剖析器都接受常用查詢參數

查詢剖析器的輸入可以包含

  • 搜尋字串,也就是要在索引中搜尋的詞彙

  • 微調查詢的參數,方法是增加特定字串或欄位的重要性、在搜尋詞彙之間套用布林邏輯,或從搜尋結果中排除內容

  • 控制查詢回應呈現的參數,例如指定呈現結果的順序或將回應限制為搜尋應用程式架構的特定欄位。

搜尋參數也可以指定篩選查詢。作為搜尋回應的一部分,篩選查詢會針對整個索引執行查詢,並快取結果。由於 Solr 為篩選查詢分配了單獨的快取,策略性地使用篩選查詢可以提高搜尋效能。

儘管名稱相似,查詢篩選器與分析篩選器無關。篩選查詢在搜尋時針對索引中已有的資料執行查詢,而分析篩選器(例如斷詞器)則按照指定的規則解析內容以進行索引。

搜尋查詢可以請求在搜尋回應中突出顯示某些詞彙;也就是說,所選詞彙會以彩色方框顯示,使其在搜尋結果的螢幕上「跳出來」。突出顯示可以讓使用者更容易在搜尋返回的長文件中找到相關段落。Solr 支援多詞彙突出顯示。Solr 包含豐富的搜尋參數集,用於控制詞彙的突出顯示方式。

搜尋回應也可以設定為包含以突出顯示文字為特色的摘要(文件摘錄)。

為了幫助使用者精確找到他們正在尋找的內容,Solr 支援兩種特殊的方式來分組搜尋結果,以協助進一步探索:分面和叢集。

分面是將搜尋結果排列成類別(基於索引詞彙)。在每個類別中,Solr 會報告相關詞彙的命中次數,這稱為分面約束。分面使得使用者可以輕鬆地在電影網站和產品評論網站等網站上探索搜尋結果,這些網站上有很多類別和每個類別中的許多項目。

下面的螢幕截圖顯示了來自 CNET 網站(CBS Interactive Inc.)的分面示例,該網站是第一個使用 Solr 的網站。

image

分面使用在索引搜尋應用程式時定義的欄位。在上面的範例中,這些欄位包括對描述數位相機有用的資訊類別:製造商、解析度和變焦範圍。

叢集會根據執行搜尋時發現的相似性來分組搜尋結果,而不是在索引內容時分組。叢集結果通常缺乏分面搜尋結果中發現的整齊階層式組織,但叢集仍然很有用。它可以揭示搜尋結果中意想不到的共同點,並且可以幫助使用者排除與他們真正搜尋的內容不相關的內容。

Solr 還支援一個稱為 MoreLikeThis 的功能,該功能使使用者可以提交新的查詢,重點關注先前查詢中返回的特定詞彙。MoreLikeThis 查詢可以利用分面或叢集來為使用者提供額外的幫助。

一個名為 回應寫入器 的 Solr 元件管理查詢回應的最終呈現。Solr 包含多種回應寫入器,包括 XML 回應寫入器JSON 回應寫入器

下面的圖表總結了搜尋過程的一些關鍵要素。

image