SOLR分面搜索返回与OR运算符一样的facet计数

时间:2013-05-17 08:45:27

标签: solr faceted-search facet

在设置问题之前,我首先尝试使用SOLR中的分面搜索来解释我想要实现的目标。想象一下,我有一个狗的参数,它描述了什么是适合的狗,一只狗可以有多种选择。我们称之为“住房”。所以狗适合:

  1. 在室内
  2. 户外
  3. 儿童
  4. 老人
  5. 守着。
  6. 所以基本上当我在这个参数上使用分面搜索时,我会得到当前数据库的结果(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)。只是方面的数量不是我预期的。

3 个答案:

答案 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