在设置问题之前,我将试着先解释一下我想通过在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)中得到正确的结果计数。只是面数不是我所期望的。
发布于 2013-05-17 11:38:55
我认为您需要使用facet.query参数,它将允许您指定一个只适用于faceting结果而不适用于主查询的查询。
此param允许您在Lucene默认语法中指定任意查询以生成facet计数。默认情况下,faceting返回“字段”的唯一术语计数,而facet.query允许您确定任意术语或表达式的计数。
在您的情况下,我相信您仍然会返回方面计数作为“字段”的唯一术语,但是使用了一些额外的过滤器。
发布于 2013-08-13 10:37:09
我认为下一种方法应该有效:
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: +16numFound + housing_ex - housing
1: 74
2: 84
3: 85
4: 86
5: 90facet.query不适用于很多方面的值。
发布于 2013-10-17 03:13:04
附加参数&rows=0
https://stackoverflow.com/questions/16604953
复制相似问题