4

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

  1. 在室内
  2. 户外
  3. 孩子们
  4. 老人
  5. 守护。

所以基本上当我在这个参数上使用分面搜索时,我会用我当前的数据库得到这样的结果(url查询facet=true&facet.field=housing):

室内(74),户外(63),儿童(71),老人(65),守卫(31)。

现在,当我检查室内参数(url 查询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 查询fq=housing:(1 OR 2)&facet=true&facet.field=housing)中得到正确的结果计数。只是方面计数不是我所期望的。

4

3 回答 3

6

我认为您将需要使用facet.query参数,这将允许您指定一个仅适用于分面结果而不是主查询的查询。

此参数允许您在 Lucene 默认语法中指定任意查询以生成构面计数。默认情况下,faceting 返回“字段”的唯一术语的计数,而 facet.query 允许您确定任意术语或表达式的计数。

在您的情况下,我相信您仍然会返回“字段”的唯一术语的方面计数,但应用了一些额外的过滤器。

于 2013-05-17T11:38:55.007 回答
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不适合很多方面的值。

于 2013-08-13T10:37:09.077 回答
1

附加参数 &rows=0

于 2013-10-17T03:13:04.700 回答