1. 程式人生 > >搜尋引擎(Solr-搜尋詳解)

搜尋引擎(Solr-搜尋詳解)

學習目標

1.掌握SOLR的搜尋工作流程;
2.掌握solr搜尋的表示語法及查詢解析器
3.熟悉solr搜尋的JSON格式 API

Solr搜尋流程介紹

回顧,使用 lucene進行搜尋的步驟:

Solr搜尋的工作流程

檢視核心的solrconfig.xml檔案,瞭解搜尋的請求處理器配置

對比看_default、sample_techproducts_configs兩種配置集的核心配置。

配置中的引數元素介紹見下一頁。

仔細檢視techproducts 核心的solrconfig.xml的
/select
/query
/browse

前面流程圖中的各項工作都在哪裡完成?
在SearchHandler
它是如何完成的?

引數元素說明

SearchHandler介紹

查詢請求在SearcheHandler這個request handler中完成,各個步驟的工作由SearchHandler中組合的元件來完成了(可自定義,在該查詢的requesthandler配置元素內配置)。示例,自定義元件組合:

<arr name="components">
 <str>query</str>
 <str>facet</str>
 <str>mlt</str>
 <str>highlight</str>
 <str>debug</str>
 <str>someothercomponent</str>
</arr>

"query" (usually QueryComponent)
"facet" (usually FacetComponent)
"mlt" (usually MoreLikeThisComponent)
"highlight" (usually HighlightComponent)
"stats" (usually StatsComponent)
"debug" (usually DebugComponent)

還可在主元件組合前、後加入元件:

<arr name="first-components">
  <str>mycomponent</str>
</arr>
<arr name="last-components">
  <str>myothercomponent</str>
</arr>

詳細瞭解: https://wiki.apache.org/solr/SearchHandler

問:SearchHandler中配置的 default是做什麼用的?

預設引數設定,如果你有這樣的預設查詢引數需要,可這樣配置。

查詢語法及解析器詳解

通用查詢引數詳解

1.defType
defType用來選擇解析引數q指定的主查詢串的查詢解析器,如未給定預設使用solr的標準查詢解析器(defType=lucene)。
Solr中提供了三種解析器供選擇:
lucene:   solr的Standard Query Parser  標準查詢解析器
dismax:   DisMax Query Parser
edismax: Extended DisMax Query Parser (eDismax)

2.sort
指定如何對搜尋結果進行排序,asc 表示聖墟,desc 降序。Solr可根據如下部分對結果文件進行排序:
文件相關性得分
函式計算的結果
設定了docValues="true"的基本資料型別欄位(numerics, string, boolean, dates, etc.) 
儲存了docValues的可排序分詞索引欄位(SortableTextFields)。
單值不分詞索引的欄位。
對於基本資料型別和SortableTextFields ,如果是多值的,排序規則:
升序:取最小值參與排序;
降序:取最大值進行排序;
如要指定用什麼值:則在傳參時用sort=field(name,max) or sort=field(name,min) 方式傳參。

3.start
分頁查詢的起始行號(從0開始),沒傳預設為0。

4.rows
查詢返回多少行,預設10(可配置)。

5.fq
Filter Query 用來在主查詢的結果上進行過濾,不影響相關性評分。Fq對於提速複雜的查詢非常有用。因為fq指定的過濾查詢結果是獨立於主查詢被快取起來的。對於下次查詢,如果用到了該過濾查詢,則直接從快取中取出結果進行對主查詢的結果進行過濾即可。

fq的傳參說明:
可以一次傳傳多個fq:
	fq=popularity:[10 TO *]&fq=section:0
也可將多個過濾條件組合在一個fq:
	fq=+popularity:[10 TO *] +section:0

說明:幾個fq就快取幾個過濾結果集

6.fl
fl(field list),指定結果中返回哪些欄位,指定的欄位必須是 stored="true" or docValues="true" 的。多個欄位用空格或英文逗號間隔。需要評分時通過 score 指定。如果傳人的值為*,則stored="true" or docValues="true" and useDocValuesAsStored="true"的欄位都會返回。

7.debug
debug引數用於指定在結果中返回除錯資訊。

8.explainOther
在一個查詢中附帶解釋另一個查詢的評分,在結果中返回它的得分解釋。這可以讓我們在topN查詢時理解為什麼某個文件沒有返回。
示例:
	q=supervillians&debugQuery=on&explainOther=id:juggernaut

9.timeAllowed
限定查詢在多少毫秒內返回,如果到時間了還未執行完成,則直接返回部分結果。

10.omitHeader
true/false ,如設為true,在則響應體中忽略表示查詢執行狀態資訊(如耗時)的頭。

11.wt
指定響應的內容格式:json、xml、csv……  SearchHandler根據它選擇ResponseWriter。

12.cache
設定是否對查詢結果、過濾查詢的結果進行快取。預設是都會被快取的。如果不需要快取明確設定 cache=false。

13.logParamsList
solr預設會日誌記錄所有的請求引數,如果不需要記錄所有,則通過此引數指定要記錄的引數名,如:
	logParamsList=q,fq
如果都不記錄:傳入: logParamsList=

14.echoParams
指定在響應體的內容的頭部中返回哪些查詢引數,可選值:
explicit: 預設,返回顯示傳入的引數+
all: 應用到查詢的所有引數.
none:不返回.