Solr聚合查詢


1  分組查詢

概述:Solr常用的分組查詢有兩種,Facet分組和Group分組,分別以下列出這兩種查詢:
 

1.1     Facet分組

solr種以導航為目的的查詢結果成為facet,在用戶查詢的結果上根據分類增加了count信息,然后用戶根據count信息做進一步搜索,

 Facet是solr的高級搜索功能之一,可以給用戶提供更友好的搜索體驗.在搜索關鍵字的同時,能夠按照Facet的字段進行分組並統計。

 

Solr Fact提供了4種類型的Fact

 

  1.  
    <lstname="facet_counts">
  2.  
    <lstname="facet_queries"/>
  3.  
    <lstname="facet_fields"/>
  4.  
    <lstname="facet_dates"/>
  5.  
    <lstname="facet_ranges"/>
  6.  
    </lst>
  7.  
    facet_queries:代表自定義條件查詢facet,類似數據庫的count函數
  8.  
    facet_fields :代表根據字段分組查詢,類似數據庫的groupby count的組合
  9.  
    facet_dates:根據日期區間分組查詢
  10.  
    facet_ranges:當然了,日期有區間,數字也有,這個就是根據數字分組查詢

 

 

 

說明:

facet的基本功能就是對搜索結果中的數據進行分類。

facet用法

 

  1.  
    facet.field:指定要分類的字段
  2.  
    facet=on 或 facet=true表示功能開啟
  3.  
    facet.prefix 表示字段前綴
  4.  
    facet.limit 表示返回的記錄數
  5.  
    facet.offict 表示從第幾條開始,主要用於分頁
  6.  
    facet.query可以任意定義查詢

 

Range Facet

一般用於date類型或數字類型的字段。

 

  1.  
    &facet=on
  2.  
    &facet.query=date:[2009-1-1T0:0:0ZTO 2010-1-1T0:0:0Z]

 

 

參數說明

 

  1.  
    facet.range 需要做facet查詢的字段
  2.  
    facet.range.start 設置起始點
  3.  
    facet.range.end 設置終止點
  4.  
    facet.range.gap 限定每一段范圍的區間差值
  5.  
    facet.range.hardend 指定如何處理最后一個區間
  6.  
    facet.range.include 指定如何處理臨界值
  7.  
    facet.range.other 指定如何處理限定范圍以為的結果
  8.  
    facet.range.method 指定facet算法

 

如下查詢:

 

http://localhost:8983/solr/solr_select/query?q=*:*&facet=on&facet.field=name

 

根據name字段分組查詢結果

 

 

 

1.2     Group分組

Solr對結果的分組處理除了facet還可以使用group。Solr的group是根據某一字段對結果分組,將每一組內滿足查詢的結果按順序返回。

Group對比Facet

Group和Facet的概念很像,都是用來分組。Facet返回所有相關的結果並允許用戶基於facet的目錄重新定義結果集。Facet可以對分組數量進行過濾,以及排序,和日期范圍,時間范圍分組,但是如果你想得到具體的數據,還得需要查詢一次或多次。group可以得到分組的組數量,一次請求,可以拿到所有的數據。

Group和Facet可以結合起來使用,但只能使用facet.field和facet.range,還不支持日期date和維度統計pivot faceting.

如下查詢:

 

http://localhost:8983/solr/solr_select/query?q=*:*&group=true&group.field=name

 

 

 

參數說明:

 

參數 類型 說明
group 布爾值 設為true,表示結果需要分組
group.field 字符串 需要分組的字段,字段類型需要時是StrField或TextField
group.func 查詢語句 可以指定查詢函數
group.query 查詢語句 可以指定查詢語句
rows 整數 返回多少組結果,默認10
start 整數 指定結果開始位置/偏移量
group.limit 整數 每組返回多數條結果,默認1
group.offset 整數 指定每組結果開始位置/偏移量
sort 排序算法 控制各個組的返回順序
group.sort 排序算法 控制每一分組內部的順序
group.format grouped/simple 設置為simple可以使得結果以單一列表形式返回
group.main 布爾值 設為true時,結果將主要由第一個字段的分組命令決定
group.ngroups 布爾值 設為true時,Solr將返回分組數量,默認fasle
group.truncate 布爾值 設為true時,facet數量將基於group分組中匹相關性高的文檔,默認fasle
group.cache.percent 整數0-100 設為大於0時,表示緩存結果,默認為0。該項對於布爾查詢,通配符查詢,模糊查詢有改善,卻會減慢普通詞查詢。

 

 

 

2      Stats Component聚合查詢

摘要: Solr可以利用StatsComponent實現對數字、字符串或日期字段的聚合統計查詢即:minmaxavgcountsum的功能

 

Stats Component參數說明:

 

參數 描述
stats 布爾值,設為true,表示開啟Stats Component
stats.field 指定需要做統計的字段
stats.facet 對指定的facet生成一個子結果集
stats.calcdistinct 布爾值,將會返回”countDistinct”和”distinctValues”,其代價很高。默認fasle

 

stats Component統計內容

 

統計項目 描述 支持的類型 是否默認輸出
min 最小值 所有
max 最大值 所有
sum 數字、日期
count 個數 所有
missing 空值的個數 所有
sumOfSquares 平方和 數字、日期
mean 均值 數字、日期  
stddev 標准差 數字、日期
percentiles 精度/小數點后幾位 數字
distinctValues set/不重復值集合 所有
countDistinct set精確個數/不重復值集合大小,使用代價很大 所有
cardinality set個數/不重復值集合大小,可能不准確 所有

 

如下查詢:

http://localhost:8983/solr/solr_select/select?q=*:*&stats=true&stats.field=id&rows=0&indent=true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM