掌握摺疊展開結果的用法;
掌握分組結果的用法;
瞭解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