2017-02-15 90 views
1

我正在使用產品目錄中的一些動態屬性,在一個字段下索引(類似於this)。一個簡單的例子是這樣的:Solr與動態字段多選分面?

{id: 1, DYN_ATT:Color||Green, DYN_ATT:Size||Small} 
{id: 2, DYN_ATT:Color||Red, DYN_ATT:Size||Small} 
{id: 3, DYN_ATT:Color||Green, DYN_ATT:Size||Small} 
{id: 4, DYN_ATT:Color||Red, DYN_ATT:Size||Large} 

然而,這似乎是不可能實現多選,就好像這些都是不同的方面。

例如,假設用戶選擇在UI中Green顏色方面:

[ ]Red 
[ ]Green 
---------- 
[ ]Small 
[ ]Large 

所得方面應該表現出所有可能的值Color(允許用戶選擇Red OR Green但應該過濾基於GreenSize面在另一個(邏輯)方面進行選擇。

[ ]Red 
[x]Green 
---------- 
[ ]Small 

有沒有辦法做到這一點? 我還沒有找到任何答案,並懷疑可能需要採取不同的方法。 不幸的是,數據中屬性的類型差異很大。

無論這些工作:

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field={!ex=DYNTAG}DYN_ATT 

這會產生太多結果Size[ ]Large的方面應該不可用,但會被退回。如果用戶選擇它,則兩個過濾器將不相交併且不會產生結果。

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field=DYN_ATT 

這將產生的結果太少,不包括Red從面,這樣用戶就不能多選的顏色:

[x]Red 
[x]Green 

任何想法?

回答

1

我找到了解決這個問題的方法。 原來相同facet.field可以用不同的標籤可以重複使用,這樣的:

&facet=true 
&fq={!tag=DYN}DYN_ATT:"Color||Green" 
&facet.field=DYN_ATT 
&facet.field={!ex=DYN key=DYN_ATT_OR}DYN_ATT 

這就產生了兩個結果爲DYN_ATT方面。事情是這樣的:

"facet_fields": { 
    "DYN_ATT": [ 
     // facets filtered based on fq 
    ] 
    "DYN_ATT_OR": [ 
     // facets unfiltered 
    ] 

然後我不得不使用DYN_ATT內容未選定面的結果,而DYN_ATT_OR方面選定方面的結果(這些我想允許的OR-ing上,多選擇)。