搜索引擎(Solr-搜索詳解3)

學習目標

掌握摺疊展開結果的用法;
掌握分組結果的用法;
瞭解solr支持的其餘搜索特性html

 

摺疊展開結果

什麼是摺疊展開結果?sql

問:在商品搜索中,當咱們輸入關鍵字,搜索到不少相關的商品文檔,當結果中存在大量的同名商品時(不一樣賣家的),你是但願看到重複的商品羅列仍是看到更多的不一樣商品(同名商品展現一個)?apache

摺疊結果,就是對搜索結果根據某字段的值進行分組去重。
展開結果:在返回結果中附帶上摺疊結果的展開列表分佈式

請看下面查詢的結果ide

http://localhost:8983/solr/techproducts/select?q=*:*&fq={!collapse%20field=price}&expand=true

Solr摺疊展開結果函數

Solr中經過Collapsing query parser 和 Expand component 的組合來提供根據某一字段對搜索結果進行摺疊、展開處理。Solr中還提供的結果分組組件也能實現摺疊功能,但若是僅是要作摺疊展開處理,摺疊展開結果性能要優些。性能

CollapsingQParser  實際上是一個後置查詢過濾器,對搜索結果根據指定的字段進行摺疊處理。它須要的本地參數有:學習

field:指定摺疊字段,必須是單值的String 、int 、float 類型的字段。
min or max:經過min或max指定的數值字段或函數查詢來選擇每一個組的頭文檔(取最大或最小值的文檔)。min、max、sort只可用其一。
sort:指定組內排序規則來選擇排在第一的文檔做爲頭文檔。默認是選取組中相關性評分最高的文檔做爲頭文檔。
nullPolicy:對不包含摺疊字段的文檔採起什麼處理策略:
     ignore:忽略,默認選項。
     expand:獨立爲一個組。
     collapse:摺疊爲一個組。ui

摺疊結果示例spa

fq={!collapse field=group_field}
fq={!collapse field=group_field min=numeric_field}
fq={!collapse field=group_field max=numeric_field}
fq={!collapse field=group_field max=sum(cscore(),numeric_field)}
fq={!collapse field=group_field nullPolicy=collapse sort='numeric_field asc, score desc'}

Solr展開結果

若是你須要在結果中返回每一個摺疊組的展開列表,在請求中加上參數 expand=true

q=*:*&fq={!collapse%20field=price}&expand=true

展開組件還支持以下參數:

expand.sort:組內排序規則,默認是相關性評分。
expand.rows:每組返回的文檔數。默認5
還有 expand.q、expand.fq

 

結果分組

Solr結果分組

根據某個字段對結果進行分組,每組返回一個頭文檔。

http://localhost:8983/solr/techproducts/select?fl=id,name&q=solr+memory&group=true&group.field=manu_exact

結果分組請求參數說明:

group :true,對搜索結果進行分組。
group.field :分組字段,必須是單值、索引的字段。
group.func:根據函數查詢結果值進行分組(分佈式下不可用)。
group.query:指定分組的查詢語句,相似 facet.query。
rows:返回的分組數,默認10
start:分頁起始行
group.limit:每組返回的文檔數,默認1。
group.offset:組內返回的文檔的偏移量。
sort:如何排序組。
group.sort:組內排序規則
group.main:用分組結果中的文檔做爲主結果返回

Solr結果分組-示例

Grouping Results by Field    根據字段進行分組

http://localhost:8983/solr/techproducts/select?fl=id,name&q=solr+memory&group=true&group.field=manu_exact

做爲主結果返回

http://localhost:8983/solr/techproducts/select?fl=id,name,manufacturer&q=solr+memory&group=true&group.field=manu_exact&group.main=true

Grouping by Query 根據查詢進行分組

http://localhost:8983/solr/techproducts/select?indent=true&fl=name,price&q=memory&group=true&group.query=price:[0+TO+99.99]&group.query=price:[100+TO+*]&group.limit=3

 

其餘搜索特性介紹

Solr其餘搜索特性

Result clustering    結果聚合

http://lucene.apache.org/solr/guide/7_3/result-clustering.html

Spatial Search    地理空間搜索

http://lucene.apache.org/solr/guide/7_3/spatial-search.html

Parallel SQL Interface   搜索的SQL接口

http://lucene.apache.org/solr/guide/7_3/parallel-sql-interface.html
相關文章
相關標籤/搜索