Indexing Solr具有动态字段的多选面?

Indexing Solr具有动态字段的多选面?,indexing,solr,facet,faceted-search,Indexing,Solr,Facet,Faceted Search,我正在处理产品目录中的一些动态属性,在一个字段下索引(类似于)。一个简单的例子如下所示: {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||

我正在处理产品目录中的一些动态属性,在一个字段下索引(类似于)。一个简单的例子如下所示:

{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}
&facet=true
&fq={!tag=DYN}DYN_ATT:"Color||Green"
&facet.field=DYN_ATT
&facet.field={!ex=DYN key=DYN_ATT_OR}DYN_ATT
"facet_fields": {
    "DYN_ATT": [
        // facets filtered based on fq
    ]
    "DYN_ATT_OR": [
        // facets unfiltered
    ]
然而,似乎不可能启用multi-select,因为这些都是不同的方面

例如,假设用户在UI中选择
绿色
颜色方面:

[ ]Red
[ ]Green
----------
[ ]Small
[ ]Large
结果面应显示
颜色
的所有可能值(以允许用户选择
红色
绿色
。但应根据在另一个(逻辑)面中选择的
绿色
过滤
大小

有没有办法做到这一点? 我还没有找到任何答案,并怀疑可能需要一种不同的方法。 不幸的是,数据中的属性类型差别很大

这两项工作都不起作用:

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field={!ex=DYNTAG}DYN_ATT
对于
大小
,这会产生太多的结果。
[]大
的方面不应可用,但会返回。如果用户选择它,两个过滤器将不相交,并且不会产生任何结果

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field=DYN_ATT
这会产生太少的结果,从facets中排除
红色
,因此用户无法在颜色上进行多重选择:

[x]Red
[x]Green

有什么想法吗?

我找到了解决这个问题的办法。 原来相同的
facet.field
可以与不同的标记一起重用,如下所示:

{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}
&facet=true
&fq={!tag=DYN}DYN_ATT:"Color||Green"
&facet.field=DYN_ATT
&facet.field={!ex=DYN key=DYN_ATT_OR}DYN_ATT
"facet_fields": {
    "DYN_ATT": [
        // facets filtered based on fq
    ]
    "DYN_ATT_OR": [
        // facets unfiltered
    ]
这将为
DYN_ATT
方面产生两个结果。类似于:

{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}
&facet=true
&fq={!tag=DYN}DYN_ATT:"Color||Green"
&facet.field=DYN_ATT
&facet.field={!ex=DYN key=DYN_ATT_OR}DYN_ATT
"facet_fields": {
    "DYN_ATT": [
        // facets filtered based on fq
    ]
    "DYN_ATT_OR": [
        // facets unfiltered
    ]
然后,我只需对未选择的方面结果使用
DYN_ATT
内容,对所选的方面结果使用
DYN_ATT_或
facet(对于多选,我希望允许或启用的方面)