搜尋引擎(Solr-搜尋詳解3)
學習目標
掌握摺疊展開結果的用法;
掌握分組結果的用法;
瞭解solr支援的其他搜尋特性
摺疊展開結果
什麼是摺疊展開結果?
問:在商品搜尋中,當我們輸入關鍵字,搜尋到很多相關的商品文件,當結果中存在大量的同名商品時(不同賣家的),你是希望看到重複的商品羅列還是看到更多的不同商品(同名商品展示一個)?
摺疊結果,就是對搜尋結果根據某欄位的值進行分組去重。
展開結果:在返回結果中附帶上摺疊結果的展開列表
請看下面查詢的結果
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:摺疊為一個組。
摺疊結果示例
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