2017-02-15 54 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上,多选择)。