在设置问题之前,我首先尝试使用SOLR中的分面搜索来解释我想要实现的目标。想象一下,我有一个狗的参数,它描述了什么是适合的狗,一只狗可以有多种选择。我们称之为“住房”。所以狗适合:
所以基本上当我在这个参数上使用分面搜索时,我会得到当前数据库的结果(url query facet=true&facet.field=housing
):
室内(74),户外(63),儿童(71),老人(65),护卫(31)。
现在,当我检查室内参数(url query fq=housing:1&facet=true&facet.field=housing
)时,我得到的结果如下:
室内(74),户外(53),儿童(60),老人(53),守卫(15)。
向我显示,如果检查下一个参数“户外”,则有53只狗在室内和室外。我想得到结果,这将告诉“如果我检查下一个选项,将在结果中添加多少只狗”。因为可以有适合户外的狗。在首先检查“室内”参数后,我想得到这样的结果:
室内(74),户外(83),儿童(78),老人(79),守卫(75)
或以其他方式
室内(+0),户外(+9),儿童(+4),老人(+5),守卫(+1)
在SOLR分面搜索中是否可以这样?或者我使用不正确的工具来实现这一目标。因为基本上当我检查“室内”和“户外”时,我从查询中获得了正确的结果计数(url query fq=housing:(1 OR 2)&facet=true&facet.field=housing
)。只是方面的数量不是我预期的。
答案 0 :(得分:6)
我认为您需要使用facet.query参数,该参数允许您指定仅适用于分面结果的查询,而不是主查询。
此参数允许您在Lucene默认语法中指定任意查询以生成构面计数。默认情况下,faceting返回“field”的唯一术语计数,而facet.query允许您确定任意术语或表达式的计数。
在您的情况下,我相信您仍会返回“字段”的唯一字词的构面数,但会应用一些额外的过滤器。
答案 1 :(得分:1)
我认为下一步应该有效:
fq={!tag=housing}housing:1&facet.field={!key=housing}housing&facet.field={!key=housing_ex ex=housing}housing
你应该得到类似的东西:
"facet_counts": {
"facet_queries": {},
"facet_fields": {
"housing": [
"1", 74,
"2", 53,
"3", 60,
"4", 53,
"5", 15
],
"housing_ex": [
"1", 74,
"2", 63,
"3", 71,
"4", 65,
"5", 31
]
}
}
然后你应该做:housing_ex - housing
。结果是:
1: +0
2: +10
3: +11
4: +12
5: +16
numFound + housing_ex - housing
:
1: 74
2: 84
3: 85
4: 86
5: 90
facet.query
不适合很多方面值。
答案 2 :(得分:1)
追加参数& rows = 0