首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SOLR面-返回facet的搜索与OR运算符一起计算

SOLR面-返回facet的搜索与OR运算符一起计算
EN

Stack Overflow用户
提问于 2013-05-17 08:45:27
回答 3查看 8.3K关注 0票数 4

在设置问题之前,我将试着先解释一下我想通过在SOLR中使用分面搜索来实现什么。假设我有一个用于狗的参数,它描述狗适合什么,而一只狗可以有多个选择。我们把它叫做“住房”。因此,狗适合:

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

因此,基本上,当我对这个参数使用分面搜索时,我使用当前的数据库获得如下结果(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)中得到正确的结果计数。只是面数不是我所期望的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-17 11:38:55

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

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

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

票数 6
EN

Stack Overflow用户

发布于 2013-08-13 10:37:09

我认为下一种方法应该有效:

代码语言:javascript
复制
fq={!tag=housing}housing:1&facet.field={!key=housing}housing&facet.field={!key=housing_ex ex=housing}housing

你应该得到这样的东西:

代码语言:javascript
复制
"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。结果是:

代码语言:javascript
复制
1: +0
2: +10
3: +11
4: +12
5: +16

numFound + housing_ex - housing

代码语言:javascript
复制
1: 74
2: 84
3: 85
4: 86
5: 90

facet.query不适用于很多方面的值。

票数 1
EN

Stack Overflow用户

发布于 2013-10-17 03:13:04

附加参数&rows=0

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16604953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档