从Solr结果中筛选出不相关的方面

时间:2012-10-18 18:29:26

标签: solr facet

我花了好几个小时四处寻找解决问题的方法。我看到人们提出的问题接近于我想要完成的事情,但到目前为止似乎没有人提出同样的问题。让我看看我是否能够充分解释这一点:

说我是一家鞋店。在我的网站上我有三个页面:一个用于男鞋,一个用于女鞋,一个用于童鞋。假设我的鞋桌有prod_group字段。所以对于男人的页面,查询将是q = prod_group:men。现在让我们说我想要提供的一个方面是品牌。 Q = prod_group:男性&安培; filter.field =品牌

我遇到的问题是,我的数据库中显示了所有品牌,而不仅仅是与男鞋相关的品牌。换句话说,我已经知道“我的小马”系列中没有男鞋。我不想在品牌方面展示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而且我看不到很快就会改变。我是否错过了一些查询/架构/配置选项,它将通过一个查询执行我需要的操作?

3 个答案:

答案 0 :(得分:2)

您可以检查一个名为Facet Excluding Filters的选项,无论应用何种过滤器,都可以返回构面。

e.g。
您使用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

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

答案 1 :(得分:0)

您是否查看了facet.query选项。从描述中可以看出它将完成你所需要的。

  

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

答案 2 :(得分:0)

fq=prod_group:men

使过滤也适用于构面结果,而q参数则不然。