solr參數之facet

facet就像sql語句中的group一樣,是對某一個字段進行group並count,即能夠按照Facet的字段進行分組並統計。

一、基本使用:

必須屬性:facet=true&facet.field=YOU_FIELD_NAME(注:facet=true打開層面,facet.field=YOU_FIELD_NAME想group的字段名稱)e.g:

http://localhost/solr/select/q=:&indent=on&facet=on&facet.field=unit_price&facet.field=developer_id

二、facet 參數

facet的參數見solr官方wiki http://wiki.apache.org/solr/SimpleFacetParameters

1.1 facet.prefix

表示Facet字段值的前綴.比如”facet.field=cpu&facet.prefix=Intel”,那麼對cpu字段進行Facet查詢,返回的cpu都是以”Intel”開頭的,”AMD”開頭的cpu型號將不會被統計在內.

1.2 facet.sort

表示Facet字段值以哪種順序返回.可接受的值爲true(count)|false(index,lex). true(count)表示按照count值從大到小排列. false(index,lex)表示按照字段值的自然順序(字母,數字的順序)排列.默認情況下爲true(count).當facet.limit值爲負數時,默認facet.sort= false(index,lex).

1.3 facet.limit

限制Facet字段返回的結果條數.默認值爲100.如果此值爲負數,表示不限制.

1.4 facet.offset

返回結果集的偏移量,默認爲0.它與facet.limit配合使用可以達到分頁的效果.

1.5 facet.mincount

限制了Facet字段值的最小count,默認爲0.合理設置該參數可以將用戶的關注點集中在少數比較熱門的領域.

1.6 facet.missing

默認爲””,如果設置爲true或者on,那麼將統計那些該Facet字段值爲null的記錄.

1.7 facet.method

取值爲enum或fc,默認爲fc.該字段表示了兩種Facet的算法,與執行效率相關.

enum適用於字段值比較少的情況,比如字段類型爲布爾型,或者字段表示中國的所有省份.Solr會遍歷該字段的所有取值,並從filterCache裏爲每個值分配一個filter(這裏要求solrconfig.xml裏對filterCache的設置足夠大).然後計算每個filter與主查詢的交集.

fc(表示Field Cache)適用於字段取值比較多,但在每個文檔裏出現次數比較少的情況.Solr會遍歷所有的文檔,在每個文檔內搜索Cache內的值,如果找到就將Cache內該值的count加1.

1.8 facet.enum.cache.minDf

當facet.method=enum時,此參數其作用,minDf表示minimum document frequency.也就是文檔內出現某個關鍵字的最少次數.該參數默認值爲0.設置該參數可以減少filterCache的內存消耗,但會增加總的查詢時間(計算交集的時間增加了).如果設置該值的話,官方文檔建議優先嚐試25-50內的值.

2. Date Facet

日期類型的字段在文檔中很常見,如商品上市時間,貨物出倉時間,書籍上架時間等等.某些情況下需要針對這些字段進行Facet.不過時間字段的取值有無限性,用戶往往關心的不是某個時間點而是某個時間段內的查詢統計結果. Solr爲日期字段提供了更爲方便的查詢統計方式.當然,字段的類型必須是DateField(或其子類型).

需要注意的是,使用Date Facet時,字段名,起始時間,結束時間,時間間隔這4個參數都必須提供.

與Field Facet類似,Date Facet也可以對多個字段進行Facet.並且針對每個字段都可以單獨設置參數.

2.1 facet.date

該參數表示需要進行Date Facet的字段名,與facet.field一樣,該參數可以被設置多次,表示對多個字段進行Date Facet.

2.2 facet.date.start

起始時間,時間的一般格式爲” 1995-12-31T23:59:59Z”,另外可以使用”NOW”,”YEAR”,”MONTH”等等,具體格式可以參考org.apache.solr.schema. DateField的java doc.

2.3 facet.date.end

結束時間.

2.4 facet.date.gap

時間間隔.如果start爲2009-1-1,end爲2010-1-1.gap設置爲”+1MONTH”表示間隔1個月,那麼將會把這段時間劃分爲12個間隔段.注意”+”因爲是特殊字符所以應該用”%2B”代替.

2.5 facet.date.hardend

取值可以爲true|false,默認爲false.它表示gap迭代到end處採用何種處理.舉例說明start爲2009-1-1,end爲2009-12-25,gap爲”+1MONTH”,hardend爲false的話最後一個時間段爲2009-12-1至2010-1-1;hardend爲true的話最後一個時間段爲2009-12-1至2009-12-25.

2.6 facet.date.other

取值範圍爲before|after|between|none|all,默認爲none.

before會對start之前的值做統計.

after會對end之後的值做統計.

between會對start至end之間所有值做統計.如果hardend爲true的話,那麼該值就是各個時間段統計值的和.

none表示該項禁用.

all表示before,after,all都會統計.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章