将多字段构面计算限制为可能值的子集

时间:2013-12-01 21:44:08

标签: solr faceted-search

我有一个非平凡的SOLR查询,它已涉及多个字段的过滤查询和方面计算。其中一个facet字段是一个多值整数字段,用于存储类别。有许多可能的类别,新的动态创建,因此使用多个字段不是一种选择。

我想要做的是将此字段上的构面计算限制为某组整数(=类别)。因此,例如,我想计算此字段的方面,但仅考虑类别3,7,9和15。应忽略该字段中的所有其他值。

我该怎么做?是否有一些可用于解决此问题的内置功能?或者我是否必须编写自定义搜索组件?

3 个答案:

答案 0 :(得分:1)

可以为facet.field参数指定的每个字段定义参数 - 您可以通过添加如下参数来完成:facet.field_name.prefix

答案 1 :(得分:0)

我不知道有什么方法可以定义与结果不同的构面基础,但是可以使用 facet.query 来明确定义 每个< / em> 构面过滤器,例如:

facet.query={!key=3}category:3&facet.query={!key=7}category:7&facet.query={!key=9}category:9&facet.query={!key=15}category:15

鉴于来自此gist的solr架构/数据,结果将具有以下内容:

"facet_counts": {
    "facet_queries": {
      "3": 1,
      "7": 1,
      "9": 0,
      "15": 0
    },
    "facet_fields": {
      "category": [
        "2",
        2,
        "1",
        1,
        "3",
        1,
        "7",
        1,
        "8",
        1
      ]
    },
    "facet_dates": {},
    "facet_ranges": {}
}

从而提供所需的方面结果。

我对这里的性能有一些疑问(特别是当有超过4个类别且初始查询返回大量结果时),所以在生产中使用它之前做一些基准测试会更好。

答案 2 :(得分:0)

不完全是我自己的问题的答案,但我们现在正在使用的解决方案:我想要过滤的数字,构建不同的组。所以我们可以在id前加上一个像这样的组ID:

1.3
1.8
1.9
2.4
2.5
2.11
...

在SOLR中拥有这样的数据,我们可以使用分层前缀仅面对一个组:http://wiki.apache.org/solr/SimpleFacetParameters#facet.prefix