solr参数之facet
facet就像sql語句中的group一樣,是對(duì)某一個(gè)字段進(jìn)行g(shù)roup并count,即能夠按照Facet的字段進(jìn)行分組并統(tǒng)計(jì)。
一、基本使用:
必須屬性: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 參數(shù)
facet的參數(shù)見solr官方wiki ?http://wiki.apache.org/solr/SimpleFacetParameters
?
1.1 facet.prefix
表示Facet字段值的前綴.比如”facet.field=cpu&facet.prefix=Intel”,那么對(duì)cpu字段進(jìn)行Facet查詢,返回的cpu都是以”Intel”開頭的,”AMD”開頭的cpu型號(hào)將不會(huì)被統(tǒng)計(jì)在內(nèi).
1.2 facet.sort
表示Facet字段值以哪種順序返回.可接受的值為true(count)|false(index,lex). true(count)表示按照count值從大到小排列. false(index,lex)表示按照字段值的自然順序(字母,數(shù)字的順序)排列.默認(rèn)情況下為true(count).當(dāng)facet.limit值為負(fù)數(shù)時(shí),默認(rèn)facet.sort= false(index,lex).
1.3 facet.limit
限制Facet字段返回的結(jié)果條數(shù).默認(rèn)值為100.如果此值為負(fù)數(shù),表示不限制.
1.4 facet.offset
返回結(jié)果集的偏移量,默認(rèn)為0.它與facet.limit配合使用可以達(dá)到分頁的效果.
1.5 facet.mincount
限制了Facet字段值的最小count,默認(rèn)為0.合理設(shè)置該參數(shù)可以將用戶的關(guān)注點(diǎn)集中在少數(shù)比較熱門的領(lǐng)域.
1.6 facet.missing
默認(rèn)為””,如果設(shè)置為true或者on,那么將統(tǒng)計(jì)那些該Facet字段值為null的記錄.
1.7 facet.method
取值為enum或fc,默認(rèn)為fc.該字段表示了兩種Facet的算法,與執(zhí)行效率相關(guān).
enum適用于字段值比較少的情況,比如字段類型為布爾型,或者字段表示中國的所有省份.Solr會(huì)遍歷該字段的所有取值,并從filterCache里為每個(gè)值分配一個(gè)filter(這里要求solrconfig.xml里對(duì)filterCache的設(shè)置足夠大).然后計(jì)算每個(gè)filter與主查詢的交集.
fc(表示Field Cache)適用于字段取值比較多,但在每個(gè)文檔里出現(xiàn)次數(shù)比較少的情況.Solr會(huì)遍歷所有的文檔,在每個(gè)文檔內(nèi)搜索Cache內(nèi)的值,如果找到就將Cache內(nèi)該值的count加1.
1.8 facet.enum.cache.minDf
當(dāng)facet.method=enum時(shí),此參數(shù)其作用,minDf表示minimum document frequency.也就是文檔內(nèi)出現(xiàn)某個(gè)關(guān)鍵字的最少次數(shù).該參數(shù)默認(rèn)值為0.設(shè)置該參數(shù)可以減少filterCache的內(nèi)存消耗,但會(huì)增加總的查詢時(shí)間(計(jì)算交集的時(shí)間增加了).如果設(shè)置該值的話,官方文檔建議優(yōu)先嘗試25-50內(nèi)的值.
2. Date Facet
日期類型的字段在文檔中很常見,如商品上市時(shí)間,貨物出倉時(shí)間,書籍上架時(shí)間等等.某些情況下需要針對(duì)這些字段進(jìn)行Facet.不過時(shí)間字段的取值有無限性,用戶往往關(guān)心的不是某個(gè)時(shí)間點(diǎn)而是某個(gè)時(shí)間段內(nèi)的查詢統(tǒng)計(jì)結(jié)果. Solr為日期字段提供了更為方便的查詢統(tǒng)計(jì)方式.當(dāng)然,字段的類型必須是DateField(或其子類型).
需要注意的是,使用Date Facet時(shí),字段名,起始時(shí)間,結(jié)束時(shí)間,時(shí)間間隔這4個(gè)參數(shù)都必須提供.
與Field Facet類似,Date Facet也可以對(duì)多個(gè)字段進(jìn)行Facet.并且針對(duì)每個(gè)字段都可以單獨(dú)設(shè)置參數(shù).
2.1 facet.date
該參數(shù)表示需要進(jìn)行Date Facet的字段名,與facet.field一樣,該參數(shù)可以被設(shè)置多次,表示對(duì)多個(gè)字段進(jìn)行Date Facet.
2.2 facet.date.start
起始時(shí)間,時(shí)間的一般格式為” 1995-12-31T23:59:59Z”,另外可以使用”NOW”,”YEAR”,”MONTH”等等,具體格式可以參考o(jì)rg.apache.solr.schema. DateField的java doc.
2.3 facet.date.end
結(jié)束時(shí)間.
2.4 facet.date.gap
時(shí)間間隔.如果start為2009-1-1,end為2010-1-1.gap設(shè)置為”+1MONTH”表示間隔1個(gè)月,那么將會(huì)把這段時(shí)間劃分為12個(gè)間隔段.注意”+”因?yàn)槭翘厥庾址詰?yīng)該用”%2B”代替.
2.5 facet.date.hardend
取值可以為true|false,默認(rèn)為false.它表示gap迭代到end處采用何種處理.舉例說明start為2009-1-1,end為2009-12-25,gap為”+1MONTH”,hardend為false的話最后一個(gè)時(shí)間段為2009-12-1至2010-1-1;hardend為true的話最后一個(gè)時(shí)間段為2009-12-1至2009-12-25.
2.6 facet.date.other
取值范圍為before|after|between|none|all,默認(rèn)為none.
before會(huì)對(duì)start之前的值做統(tǒng)計(jì).
after會(huì)對(duì)end之后的值做統(tǒng)計(jì).
between會(huì)對(duì)start至end之間所有值做統(tǒng)計(jì).如果hardend為true的話,那么該值就是各個(gè)時(shí)間段統(tǒng)計(jì)值的和.
none表示該項(xiàng)禁用.
all表示before,after,all都會(huì)統(tǒng)計(jì).
轉(zhuǎn)載于:https://www.cnblogs.com/cuihongyu3503319/p/10765997.html
總結(jié)
以上是生活随笔為你收集整理的solr参数之facet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 类 A类调用B类
- 下一篇: 电脑插u盘启动不了怎么回事啊 &