我有一个非平凡的SOLR查询,它已涉及多个字段的过滤查询和方面计算。其中一个facet字段是一个多值整数字段,用于存储类别。有许多可能的类别,新的动态创建,因此使用多个字段不是一种选择。
我想要做的是将此字段上的构面计算限制为某组整数(=类别)。因此,例如,我想计算此字段的方面,但仅考虑类别3,7,9和15。应忽略该字段中的所有其他值。
我该怎么做?是否有一些可用于解决此问题的内置功能?或者我是否必须编写自定义搜索组件?
答案 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