Solr 分面是根據(jù)索引術(shù)語將搜索結(jié)果排列成類別。
向搜索者提供索引的術(shù)語,以及每個術(shù)語找到多少匹配文檔的數(shù)字計數(shù)。分面使用戶可以輕松地瀏覽搜索結(jié)果,縮小搜索結(jié)果的范圍。
控制分面有兩個通用參數(shù)。
如果設(shè)置為true
,則此參數(shù)在查詢響應(yīng)中啟用 faceting 計數(shù)。如果設(shè)置為false
,則為 blank 或丟失值,則此參數(shù)將禁用分面。除非此參數(shù)設(shè)置為true
,否則下面列出的其他參數(shù)都不起作用。默認值為 blank(false)。
此參數(shù)允許您在 Lucene 默認語法中指定任意查詢來生成 faceting 計數(shù)。
默認情況下,Solr 的 faceting 功能會自動確定字段的唯一術(shù)語,并返回每個術(shù)語的計數(shù)。使用facet.query
,您可以覆蓋此默認行為,并選擇您要查看哪些術(shù)語或表達式計算。在典型的分面實現(xiàn)中,您將指定一些facet.query
參數(shù)。此參數(shù)對基于數(shù)字范圍的分面或基于前綴的分面特別有用。
您可以多次設(shè)置該facet.query
參數(shù),以指示應(yīng)將多個查詢用作單獨的 faceting 約束。
如果您要以默認語法以外的語法使用 faceting 查詢,請在 faceting 查詢前加上查詢符號的名稱。例如,要使用假設(shè)的myfunc
查詢解析器,可以像這樣設(shè)置facet.query
參數(shù):
facet.query={!myfunc}name~fred
可以使用幾個參數(shù)來根據(jù)指定字段中的索引項(term)來觸發(fā)分面。
在使用這些參數(shù)時,務(wù)必記住在 Lucene 中 “term” 是一個非常具體的概念:它與在任何分析發(fā)生后被索引的文本字段/值對相關(guān)。對于包含詞干、小寫或單詞拆分的文本字段,所生成的 term 可能不是您所期望的。
如果您希望 Solr 對完整的文本字符串執(zhí)行分析(用于搜索)和分面,請使用架構(gòu)中的 copyField 指令來創(chuàng)建該字段的兩個版本:一個文本和一個字符串。確保兩者都是:indexed="true"。(有關(guān)該 copyField 指令的更多信息,請參閱文檔、字段和架構(gòu)設(shè)計。)
除非另有說明,否則下面的所有參數(shù)都可以在 per-field 的基礎(chǔ)上來指定為 f.<fieldname>.facet.<parameter> 語法。
該facet.field
參數(shù)標識應(yīng)該被視為一個分面的字段。它迭代該字段中的每個 Term,并使用該 Term 作為約束生成一個 facet 計數(shù)。此參數(shù)可以在查詢中多次指定以選擇多個分面字段。
Note:如果您未將此參數(shù)設(shè)置為架構(gòu)中的至少一個字段,則本節(jié)中介紹的其他任何參數(shù)都不會有任何影響。
這個facet.prefix
參數(shù)限制了以給定的字符串前綴開頭的那些 Term。這不會以任何方式限制查詢,只會限制查詢返回的分面。
該facet.contains
參數(shù)限制了包含給定子字符串的 term。這不會以任何方式限制查詢,只會限制查詢返回的分面。
如果使用facet.contains
,則在將給定的子字符串與候選分面 term 匹配時,facet.contains.ignoreCase
參數(shù)會導(dǎo)致大小寫被忽略。
此參數(shù)確定分面字段約束的排序。
這個參數(shù)有兩個選項:
通過計數(shù)對約束進行排序(最高計數(shù)優(yōu)先)。
返回按其索引順序排序的約束(按索引 term 字典順序)。對于 ASCII 范圍中的 term,這將按字母順序排序。
如果facet.limit
大于 0,則默認值為count
,否則默認為index
。
此參數(shù)指定應(yīng)該為 facet 字段返回的約束計數(shù)的最大數(shù)量(基本上是返回的字段的分面數(shù))。負值意味著 Solr 將返回?zé)o限數(shù)量的約束計數(shù)。默認值是100
。
該facet.offset
參數(shù)表示在允許分頁的約束列表中的偏移量。默認值是0
。
該facet.mincount
參數(shù)指定要包括在響應(yīng)中的 facet 字段所需的最小計數(shù)。如果一個字段的計數(shù)低于最小值,則不返回字段的分面。默認值是0
。
如果設(shè)置為true
,則此參數(shù)指示除了 facet 字段的基于 Term 的約束之外,還應(yīng)計算與查詢匹配的所有結(jié)果的計數(shù),但是該字段沒有分面值的計算應(yīng)該返回。默認值是false
。
該facet.method
參數(shù)用于選擇面對某個字段時 Solr 應(yīng)使用的算法或方法的類型。
以下方法可用:
枚舉一個字段中的所有 term,計算匹配該 term 的文檔與匹配查詢的文檔的集合交集。
建議使用此方法分割只具有少量不同值的 faceting 多值字段。每個文檔的平均值數(shù)量無關(guān)緊要。
通過循環(huán)遍歷與查詢匹配的文檔并對每個文檔中出現(xiàn)的 term 求和來計算 facet 數(shù)。
如果該字段是多值的或被標記(根據(jù)FieldType.isTokened()
),則這當(dāng)前使用 UnInvertedField 緩存來實現(xiàn)。在緩存中查找每個文檔以查看它包含的 term/值,并為每個值遞增一個計數(shù)。
此方法適用于字段的索引值數(shù)量較多但每個文檔的值數(shù)量較少的情況。對于多值字段,使用混合方法,使用filterCache
的 term 過濾器來匹配多個文檔的 term。這些字母fc
代表字段緩存。
單值字符串字段的每段字段 faceting。啟用facet.method=fcs
并控制與threads
本地參數(shù)一起使用的線程數(shù)。此參數(shù)允許分面在快速索引更改時速度更快。
默認值是fc
(除了使用BoolField
字段類型的字段和facet.exists=true
被請求時),因為它傾向于使用較少的內(nèi)存,并且當(dāng)字段在索引中具有許多獨特的 term 時速度更快。
此參數(shù)指示在確定該 term 的約束計數(shù)時應(yīng)使用 filterCache 的最小文檔頻率(匹配 term 的文檔的數(shù)量)。這只用于分面的facet.method=enum
方法。
大于零的值會降低 filterCache 的內(nèi)存使用量,但會增加查詢處理所需的時間。如果在具有大量 term 的字段上分面,并且希望減少內(nèi)存使用量,請嘗試將此參數(shù)設(shè)置為介于25
和50
之間的值,然后運行一些測試。然后,根據(jù)需要優(yōu)化參數(shù)設(shè)置。
默認值是0
,導(dǎo)致 filterCache 被用于字段中的所有術(shù)語。
要將分面數(shù)加 1,請指定facet.exists=true
。該參數(shù)可以與facet.method=enum
一起使用或者省略時使用。它只能用于非字典字段(如字符串)。這可能會加速大指數(shù)或高基數(shù)面值的分面。
如果您想從分面計數(shù)中刪除 term,但將它們保留在索引中,則該facet.excludeTerms
參數(shù)允許您執(zhí)行此操作。
在某些情況下,在分布式 Solr 查詢中為某以分面返回的“top”約束的準確性可以通過“過度請求”從每個單獨的分片中得到期望的約束(即,facet.limit)的數(shù)量來提高。在這些情況下,每個分片默認都會被要求提供最高10 + (1.5 * facet.limit)
限制。
在某些情況下,根據(jù)您的文檔如何在您的分片中進行分區(qū)以及您使用的facet.limit
值,您可能會發(fā)現(xiàn)增加或減少 Solr 過多請求的數(shù)量是有利的。這可以通過設(shè)置facet.overrequest.count
(默認為10
)和facet.overrequest.ratio
(默認為1.5
)參數(shù)來實現(xiàn)。
此參數(shù)將導(dǎo)致加載分面中使用的基礎(chǔ)字段與指定的線程數(shù)并行執(zhí)行。指定 facet.threads=N,其中 N 是使用的最大線程數(shù)。
忽略這個參數(shù)或者指定線程數(shù)0
不會產(chǎn)生任何線程,只會使用主請求線程。指定負數(shù)的線程將最多創(chuàng)建Integer.MAX_VALUE
線程。
您可以在任何日期字段或支持范圍查詢的任何數(shù)字字段上使用“范圍分面”。這對于將諸如價格之類的一系列范圍查詢(作為查詢方面)拼接在一起是特別有用的。
該facet.range
參數(shù)定義了 Solr 應(yīng)該為其創(chuàng)建范圍分面的字段。例如:
facet.range=price&facet.range=age
facet.range=lastModified_dt
該facet.range.start
參數(shù)指定范圍的下限。您可以用每個字段的語法來指定此參數(shù)f.<fieldname>.facet.range.start
。例如:
f.price.facet.range.start=0.0&f.age.facet.range.start=10
f.lastModified_dt.facet.range.start=NOW/DAY-30DAYS
該 facet.range.end
參數(shù)指定范圍的上限。您可以用每個字段的語法來指定此參數(shù)f.<fieldname>.facet.range.end
。例如:
f.price.facet.range.end=1000.0&f.age.facet.range.start=99
f.lastModified_dt.facet.range.end=NOW/DAY+30DAYS
每個范圍的跨度表示為要添加到下限的值。對于日期字段,這應(yīng)該使用 DateMathParser 語法(如:facet.range.gap=%2B1DAY …? '+1DAY'
)來表示。您可以使用以下語法在每個字段的基礎(chǔ)上指定此參數(shù)f.<fieldname>.facet.range.gap
。例如:
f.price.facet.range.gap=100&f.age.facet.range.gap=10
f.lastModified_dt.facet.range.gap=+1DAY
該facet.range.hardend
參數(shù)是一個布爾參數(shù),它指定 Solr 如何處理 facet.range.gap 不能在 facet.range.start 和 facet.range.end 之間平均分配的情況。
如果為true
,則最后一個范圍約束將facet.range.end
值作為上限的。如果為false
,則最后一個范圍將有最小可能的上限,然后是facet.range.end
,這個范圍就是指定范圍間隙的確切寬度。此參數(shù)的默認值為 false。
該參數(shù)可以使用f.<fieldname>.facet.range.hardend
語法在每個字段的基礎(chǔ)上指定。
默認情況下,用于計算facet.range.start
和facet.range.end
之間的范圍分面的區(qū)域包括它們的下界的和排他性的上界。用facet.range.other
參數(shù)定義的“before”范圍是排他性的,“l(fā)ater”范圍是包含性的。這個默認值,相當(dāng)于下面的“l(fā)ower”,不會導(dǎo)致在邊界上重復(fù)計數(shù)。您可以使用facet.range.include
參數(shù)來修改此行為,方法如下:
lower
:所有基于 gap 的范圍包括它們的下限。
upper
:所有基于 gap 的范圍包括它們的上限。
edge
:即使未指定相應(yīng)的 upper/lower 選項,第一個和最后一個 gap 范圍也包括它們的邊界界限(第一個的下限和第二個的上限)。
outer
:“before”和“l(fā)ater”范圍將包括其邊界,即使第一個或最后一個范圍已經(jīng)包含這些邊界。
all
:包括所有選項:lower
,upper
,edge
,和outer
。
您可以使用f.<fieldname>.facet.range.include
語法在每個字段上指定此參數(shù),并且可以多次指定它以指示多個選項。
為了確保您避免重復(fù)計算,不要同時選擇lower
和upper
,不要選擇outer
,也不要選擇all
。
該facet.range.other
參數(shù)指定除了facet.range.start
和facet.range.end
之間的每個范圍約束的計數(shù)外,還應(yīng)計算這些選項的計數(shù):
before
:所有具有字段值的記錄都低于第一個范圍的下限。
after
:所有具有字段值的記錄都大于最后一個范圍的上限。
between
:所有具有字段值的記錄都在所有范圍的開始和結(jié)束邊界之間。
none
:不要計算任何計數(shù)。
all
:計算 before,between 和 later 的計數(shù)。
這個參數(shù)可以用每個字段的f.<fieldname>.facet.range.other
語法來指定,除了all
選項外,這個參數(shù)可以被多次指定來指示多個選項,但是none
會覆蓋所有其他的選項。
該facet.range.method
參數(shù)選擇 Solr 應(yīng)用于范圍分面的算法或方法的類型。這兩種方法產(chǎn)生相同的結(jié)果,但性能可能會有所不同。
此方法根據(jù)其他 facet.range 參數(shù)生成范圍,并為每個參數(shù)執(zhí)行一個過濾器,稍后與主查詢結(jié)果集相交以獲取計數(shù)。它將使用 filterCache,所以它將有足夠大的緩存來包含所有的范圍。
此方法循環(huán)遍歷與主查詢匹配的文檔,并為每個文檔找到該值的正確范圍。此方法將使用 docValues(如果為字段啟用)或 fieldCache。該dv
方法不支持字段類型DateRangeField 或使用 group.facets。
該參數(shù)的默認值是filter
。
日期范圍和時區(qū):分面上的日期字段是一個常見的情況,該TZ
參數(shù)可用于確保 "每天的分面計數(shù)" 或 "每月的分面計數(shù)" 基于有意義的定義,對于給定的日期/月份,"starts" 與特定時區(qū)相關(guān)。
有關(guān)詳細信息, 請參閱 "使用日期" 部分中的示例。
該 facet.mincount 參數(shù)與字段分面中使用的相同,也適用于范圍刻面。使用時,響應(yīng)中將不包括低于最小值的范圍。
透視(Pivoting)是一種匯總工具,可讓您自動對表中存儲的數(shù)據(jù)進行排序、計數(shù)、匯總或平均值。結(jié)果通常顯示在顯示匯總數(shù)據(jù)的第二個表格中。Pivot 分面可以讓您通過多個字段創(chuàng)建分面文檔的結(jié)果匯總表。
另一種看待問題的方式是查詢產(chǎn)生一個決策樹,因為 Solr 告訴您“關(guān)于分面 A,約束/計數(shù)是:X/N,Y/M 等等。如果您用 X 來約束A,那么 B 的約束計數(shù)將是 S/P,T/Q等“。換句話說,如果從當(dāng)前分面結(jié)果中應(yīng)用一個約束,它會事先告訴您什么是“下一個”分面結(jié)果集。
該facet.pivot
參數(shù)定義了用于 pivot 的字段。多個facet.pivot
值將在響應(yīng)中創(chuàng)建多個 “facet_pivot” 部分。用逗號分隔每個字段列表。
該facet.pivot.mincount
參數(shù)定義了為了將分面包括在結(jié)果中而需要匹配的文檔的最小數(shù)目。默認值是 1。
使用 “bin / solr -e techproducts” 示例,像這樣的查詢 URL 將返回下面的數(shù)據(jù),并在 “facet_pivot” 部分中找到 pivot 分面結(jié)果:
http://localhost:8983/solr/techproducts/select?q=*:*&facet.pivot=cat,popularity,inStock
&facet.pivot=popularity,cat&facet=true&facet.field=cat&facet.limit=5&rows=0&facet.pivot.mincount=2
{ "facet_counts":{
"facet_queries":{},
"facet_fields":{
"cat":[
"electronics",14,
"currency",4,
"memory",3,
"connector",2,
"graphics card",2]},
"facet_dates":{},
"facet_ranges":{},
"facet_pivot":{
"cat,popularity,inStock":[{
"field":"cat",
"value":"electronics",
"count":14,
"pivot":[{
"field":"popularity",
"value":6,
"count":5,
"pivot":[{
"field":"inStock",
"value":true,
"count":5}]}]
}]}}}
除了一些其他類型的分面所支持的一般局部參數(shù)外,一個 stats 局部參數(shù)可以和 facet.pivot 一起使用來指向 stats.field 實例(通過標簽),即,您想計算每個支點約束(Pivot Constraint)。
在下面的示例中,為每個 facet.pivot 結(jié)果層次結(jié)構(gòu)計算兩個不同(重疊)的統(tǒng)計信息集合:
stats=true
stats.field={!tag=piv1,piv2 min=true max=true}price
stats.field={!tag=piv2 mean=true}popularity
facet=true
facet.pivot={!stats=piv1}cat,inStock
facet.pivot={!stats=piv2}manu,inStock
結(jié)果如下:
{"facet_pivot":{
"cat,inStock":[{
"field":"cat",
"value":"electronics",
"count":12,
"pivot":[{
"field":"inStock",
"value":true,
"count":8,
"stats":{
"stats_fields":{
"price":{
"min":74.98999786376953,
"max":399.0}}}},
{
"field":"inStock",
"value":false,
"count":4,
"stats":{
"stats_fields":{
"price":{
"min":11.5,
"max":649.989990234375}}}}],
"stats":{
"stats_fields":{
"price":{
"min":11.5,
"max":649.989990234375}}}},
{
"field":"cat",
"value":"currency",
"count":4,
"pivot":[{
"field":"inStock",
"value":true,
"count":4,
"stats":{
"stats_fields":{
"price":{
"..."
"manu,inStock":[{
"field":"manu",
"value":"inc",
"count":8,
"pivot":[{
"field":"inStock",
"value":true,
"count":7,
"stats":{
"stats_fields":{
"price":{
"min":74.98999786376953,
"max":2199.0},
"popularity":{
"mean":5.857142857142857}}}},
{
"field":"inStock",
"value":false,
"count":1,
"stats":{
"stats_fields":{
"price":{
"min":479.95001220703125,
"max":479.95001220703125},
"popularity":{
"mean":7.0}}}}],
"..."}]}}}}]}]}}
query 本地參數(shù)可以與 facet.pivot 一起使用,來指代 facet.query 應(yīng)計算每個支點(pivot)約束的實例(按標簽)。同樣,range 本地參數(shù)也可以與 facet.pivot 一起使用以指向facet.range 實例。
在下面的例子中,兩個查詢分面用來計算 facet.pivot 結(jié)果層次結(jié)構(gòu)的 h:
facet=true
facet.query={!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]
facet.query={!tag=q1}price:[0 TO 100]
facet.pivot={!query=q1}cat,inStock
{"facet_counts": {
"facet_queries": {
"{!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]": 9,
"{!tag=q1}price:[0 TO 100]": 7
},
"facet_fields": {},
"facet_dates": {},
"facet_ranges": {},
"facet_intervals": {},
"facet_heatmaps": {},
"facet_pivot": {
"cat,inStock": [
{
"field": "cat",
"value": "electronics",
"count": 12,
"queries": {
"{!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]": 9,
"{!tag=q1}price:[0 TO 100]": 4
},
"pivot": [
{
"field": "inStock",
"value": true,
"count": 8,
"queries": {
"{!tag=q1}manufacturedate_dt:[2006-01-01T00:00:00Z TO NOW]": 6,
"{!tag=q1}price:[0 TO 100]": 2
}
},
"..."]}]}}}
以類似的方式,在下面的示例中,為每個 facet.pivot 結(jié)果層次計算兩個范圍分面:
facet=true
facet.range={!tag=r1}manufacturedate_dt
facet.range.start=2006-01-01T00:00:00Z
facet.range.end=NOW/YEAR
facet.range.gap=+1YEAR
facet.pivot={!range=r1}cat,inStock
結(jié)果如下:
{"facet_counts":{
"facet_queries":{},
"facet_fields":{},
"facet_dates":{},
"facet_ranges":{
"manufacturedate_dt":{
"counts":[
"2006-01-01T00:00:00Z",9,
"2007-01-01T00:00:00Z",0,
"2008-01-01T00:00:00Z",0,
"2009-01-01T00:00:00Z",0,
"2010-01-01T00:00:00Z",0,
"2011-01-01T00:00:00Z",0,
"2012-01-01T00:00:00Z",0,
"2013-01-01T00:00:00Z",0,
"2014-01-01T00:00:00Z",0],
"gap":"+1YEAR",
"start":"2006-01-01T00:00:00Z",
"end":"2015-01-01T00:00:00Z"}},
"facet_intervals":{},
"facet_heatmaps":{},
"facet_pivot":{
"cat,inStock":[{
"field":"cat",
"value":"electronics",
"count":12,
"ranges":{
"manufacturedate_dt":{
"counts":[
"2006-01-01T00:00:00Z",9,
"2007-01-01T00:00:00Z",0,
"2008-01-01T00:00:00Z",0,
"2009-01-01T00:00:00Z",0,
"2010-01-01T00:00:00Z",0,
"2011-01-01T00:00:00Z",0,
"2012-01-01T00:00:00Z",0,
"2013-01-01T00:00:00Z",0,
"2014-01-01T00:00:00Z",0],
"gap":"+1YEAR",
"start":"2006-01-01T00:00:00Z",
"end":"2015-01-01T00:00:00Z"}},
"pivot":[{
"field":"inStock",
"value":true,
"count":8,
"ranges":{
"manufacturedate_dt":{
"counts":[
"2006-01-01T00:00:00Z",6,
"2007-01-01T00:00:00Z",0,
"2008-01-01T00:00:00Z",0,
"2009-01-01T00:00:00Z",0,
"2010-01-01T00:00:00Z",0,
"2011-01-01T00:00:00Z",0,
"2012-01-01T00:00:00Z",0,
"2013-01-01T00:00:00Z",0,
"2014-01-01T00:00:00Z",0],
"gap":"+1YEAR",
"start":"2006-01-01T00:00:00Z",
"end":"2015-01-01T00:00:00Z"}}},
"..."]}]}}}
雖然 facet.pivot.mincount 名稱與 facet.mincount 字段分面使用的參數(shù)有所不同,但上面介紹的許多分面參數(shù)也可用于 pivot 分面:
另一種支持的分面形式是區(qū)間分面。這聽起來類似于范圍分面,但是功能更接近于使用范圍查詢進行分面查詢。區(qū)間分面允許您設(shè)置可變區(qū)間并計算在指定字段中具有這些間隔內(nèi)的值的文檔的數(shù)量。
即使通過在范圍查詢中使用分面查詢可以實現(xiàn)相同的功能,但這兩種方法的實現(xiàn)是非常不同的,并且將根據(jù)上下文提供不同的性能。
如果您擔(dān)心搜索的性能,則應(yīng)使用這兩個選項進行測試。對于相同的字段,區(qū)間分面往往會有多個時間間隔,而在過濾器緩存更有效的環(huán)境(例如靜態(tài)索引)中,分面查詢傾向于更好。
如果為該字段啟用了區(qū)間分面,此方法將使用 docValues,否則將使用 fieldCache。
使用這些參數(shù)進行區(qū)間分面:
此參數(shù)指示必須應(yīng)用區(qū)間分面的字段。它可以在同一請求中多次使用以指示多個字段。
facet.interval=price&facet.interval=size
此參數(shù)用于設(shè)置字段的時間間隔,可以多次指定,以指示多個時間間隔。這個參數(shù)是全局性的,這意味著它將被用于指定的所有字段,使用facet.interval
,除非有特定字段的覆蓋。如果要覆蓋特定字段上的此參數(shù),可以使用:f.<fieldname>.facet.interval.set
例如:
f.price.facet.interval.set=[0,10]&f.price.facet.interval.set=(10,100]
區(qū)間必須以'(' 或 '[' 開頭,然后是逗號(','),最終值,最后是 ')' 或']'。
例如:
初始值和結(jié)束值不能為空。
如果間隔需要是無限的,則特殊字符 * 可以用于開始和結(jié)束,限制。使用此特殊字符時,開始語法選項((和[)和結(jié)束語法選項()和])將被視為相同。[*,*]將包括所有在該領(lǐng)域具有價值的文件。
間隔限制可以是字符串,但不需要添加引號。所有的文本,直到逗號將被視為起始限制,并在此之后的文本將是最終限制。例如:[Buenos Aires,New York]。請記住,會進行類似字符串的比較來匹配字符串間隔中的文檔(區(qū)分大小寫)。比較器不能改變。
逗號,括號和方括號可以通過在其前面使用 \ 而被轉(zhuǎn)義。值之前和之后的空格將被省略。
起始限制不能超過最終限制。等于限制是允許的,這允許您指示要計數(shù)的特定值:[A,A],[B,B]和[C,Z]。
區(qū)間分面支持下面介紹的輸出鍵更換。輸出鍵可以在 facet.interval 參數(shù)和 facet.interval.set 參數(shù)中被替換。例如:
&facet.interval={!key=popularity}some_field
&facet.interval.set={!key=bad}[0,5]
&facet.interval.set={!key=good}[5,*]
&facet=true
該 LocalParams 語法允許壓倒一切的全局設(shè)置。它也可以提供一種向其他參數(shù)值添加元數(shù)據(jù)的方法,就像 XML 屬性一樣。
您可以標記特定的過濾器,并在分面時排除這些過濾器。這在做多選分面時很有用。
請考慮以下具有分面的示例查詢:
q=mainquery&fq=status:public&fq=doctype:pdf&facet=true&facet.field=doctype
因為一切都已經(jīng)被過濾器 doctype:pdf 約束了,所以 facet.field=doctypefacet 命令現(xiàn)在是多余的,并且除了 doctype:pdf 外一切都會返回 0 個計數(shù)。
為了實現(xiàn) doctype 的多重選擇方面,GUI 可能還想顯示其他 doctype 類型值及其關(guān)聯(lián)計數(shù),就好像 doctype:pdf 約束還沒有被應(yīng)用。例如:
=== Document Type ===
[ ] Word (42)
[x] PDF (96)
[ ] Excel(11)
[ ] HTML (63)
要返回當(dāng)前未選中的 doctype 值的計數(shù),請直接約束 doctype 的標記篩選器,并在 DOCTYPE 上分面時排除這些過濾器。
q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=true&facet.field={!ex=dt}doctype
所有類型的分面都支持過濾排除。無論是 tag 和 ex 本地參數(shù)都可以通過用逗號分隔指定多個值。
要更改分面命令的輸出鍵,請使用 key 本地參數(shù)指定一個新名稱。例如:
facet.field={!ex=dt key=mylabel}doctype
上面的參數(shù)設(shè)置會導(dǎo)致 “doctype” 字段的字段分面結(jié)果在響應(yīng)中使用鍵 “mylabel” 而不是 “doctype” 返回。當(dāng)在不同的排除情況下多次對同一個字段進行排列時,這會很有幫助。
要用某些 term 限制字段分面,請使用逗號分隔 terms 本地參數(shù)。逗號和引號可以用反斜線來轉(zhuǎn)義,如 \,。在這種情況下,facet 的計算方式類似于 facet.method=enum 但忽略facet.enum.cache.minDf。例如:
facet.field={!terms='alfa,betta,with\,with\',with space'}symbol
更多建議: