【问题标题】:Solr multi-select faceting with dynamic fields?具有动态字段的 Solr 多选分面?
【发布时间】:2017-07-03 12:09:22
【问题描述】:

我正在处理产品目录中的一些动态属性,在一个字段下编制索引(类似于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。但应根据在另一个(逻辑)中选择的Green 过滤Size 构面方面。

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

有什么想法吗?

【问题讨论】:

    标签: indexing solr facet faceted-search


    【解决方案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 产生两个结果。像这样的:

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

    然后我只需要使用 DYN_ATT 内容作为未选择的构面结果,并将 DYN_ATT_OR 构面用于选定的构面结果(我想允许 OR-ing 用于多选)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多