8

我花了几个小时四处寻找解决问题的方法。我见过人们提出的问题与我想要完成的任务很接近,但到目前为止,似乎没有人提出同样的问题。让我看看我是否可以充分解释这一点:

假设我是一家鞋店。在我的网站上,我有三页:一页是男鞋,一页是女鞋,一页是童鞋。假设我的鞋桌有字段 prod_group。因此,对于男士页面,查询将是 q=prod_group:men。现在让我们说我想提供的方面之一是品牌。q=prod_group:men&filter.field=brand

我遇到的问题是方面结果显示了我数据库中的所有品牌,而不仅仅是与男鞋相关的品牌。也就是说,我已经知道“我的小马驹”系列中的男鞋是零。我不想在品牌方面显示 My Little Pony。设置 facet.mincount 也不是我需要的。如果我运行查询 q=prod_group:men&fq=color:red&filter.field=brand,客户希望向消费者展示“Mighty Joe”品牌没有任何红鞋,所以我仍然需要具有方面计数的方面0。

基本上我希望的是基于基本查询结果的方面结果。到目前为止,我看到完成此操作的唯一方法是运行两个查询:第一个仅使用基本查询并设置 facet.mincount = 1 以获取相关方面的列表,然后将 facet.mincount 的实际查询返回 0 所以我可以根据已经做出的方面选择确定何时将不再可用的某些选项变灰。

运行两个查询似乎不太优雅。从长远来看,facet.pivot 可能会有所帮助,但我们仍在使用 3.x,而且我认为这种情况不会很快改变。我是否错过了一些查询/模式/配置选项,这些选项可以满足我对一个查询的需求?

4

3 回答 3

3

您可以检查一个名为Facet Excluding Filters的选项,这将允许您返回分面,而不管应用的过滤器如何。

例如
,您使用 facet.mincount 1 过滤男性fq=prod_group:men,这将返回适用于此过滤器的所有品牌方面。
然后,当您对某种颜色进行子过滤时,fq=color:red您可以获得两个方面,一个带有结果,一个没有过滤器,使用排除过滤器,
例如fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

这将为您提供带有和不带有过滤器的方面,您可以使用这些方面来灰显客户端的差异。客户端有点开销,但您只需要执行一个查询。

于 2012-10-19T09:52:16.623 回答
0
fq=prod_group:men

使过滤也适用于构面结果,而参数并非如此q

于 2012-10-19T10:29:46.433 回答
0

您是否查看过facet.query选项。从描述中听起来它会完成你所需要的。

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

于 2012-10-18T19:28:23.230 回答