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

生成的facet应显示Color的所有可能值(以允许用户选择RedGreen。但应根据在另一个(逻辑)facet中选择的Green筛选Sizefacet。

[ ]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从facets中排除,因此用户将无法在Color:上进行多选

[x]Red
[x]Green

有什么想法吗?

我找到了解决这个问题的方法。事实证明,相同的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

这对于CCD_ 11方面产生了两个结果。类似这样的东西:

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

然后,我只需要将DYN_ATT内容用于未选择的方面结果,将DYN_ATT_OR方面用于选定的方面结果(对于多选,我希望允许对其进行OR操作)。

最新更新