【发布时间】:2013-05-12 09:07:48
【问题描述】:
在设置问题之前,我将首先尝试解释我想通过在 SOLR 中使用分面搜索来实现什么。想象一下,我有一个狗的参数,它描述了狗适合什么,一只狗可以有多种选择。我们称之为“住房”。所以狗适合:
- 室内
- 户外
- 孩子们
- 老人
- 守卫。
所以基本上当我在这个参数上使用分面搜索时,我会用我当前的数据库得到这样的结果(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)。只是方面计数不是我所期望的。
【问题讨论】:
-
没有复杂的例子?你想获得与过滤器无关的方面计数吗???
-
我已经弄清楚,实现我想要的唯一方法(可能)是针对 fq=housing:(!(1))&facet=true&facet.field=housing&rows 这样的方面进行另一个查询=0 这基本上否定了原始查询。对于更多检查选项(例如室内和室外),我需要像 fq=housing:(!(1 OR 2))&facet=true&facet.field=housing&rows=0 这样的查询。由于有更多的参数,我基本上需要每个参数进行这个“否定”查询来获取数字,这对我来说似乎并不是最优的:/
-
您可以在同一查询中排除构面过滤器。 wiki.apache.org/solr/…。您还可以为构面字段添加别名,以便同时获得包含和排除的构面
标签: solr faceted-search facet