Solr多选切面与动态字段?

时间:2017-02-15 01:09:54

标签: indexing solr facet faceted-search

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

{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的所有可能值(以允许用户选择RedGreen。但应根据{{过滤Size方面1}}在另一个(逻辑)方面被选中。

Green

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

这些都不起作用:

[ ]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

有什么想法吗?

1 个答案:

答案 0 :(得分: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的构图,用于多项选择) )。