我花了几个小时四处寻找解决我的问题的方法。我见过人们问的问题与我想要完成的事情相近,但到目前为止,似乎没有人问同样的问题。让我看看我是否可以充分解释这一点:
说我是一家鞋店。在我的网站上,我有三个页面:一个是男鞋,一个是女鞋,一个是童鞋。假设我的鞋表有字段 prod_group。因此,对于男士页面,查询将是 q=prod_group:men。现在让我们说我想提供的一个方面是品牌。 q=prod_group:men&filter.field=brand
我遇到的问题是分面结果显示了我数据库中的所有品牌,而不仅仅是与男鞋相关的品牌。也就是说,我已经知道《My Little Pony》这个系列的男鞋是零。我不想在品牌方面展示 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,我认为这不会很快发生变化。我是否错过了一些查询/模式/配置选项,这些选项可以通过一个查询完成我需要的操作?
最佳答案
您可以检查一个名为 Facet Excluding Filters 的选项。 ,这将允许您返回构面,而不管应用的过滤器如何。
例如
您筛选男性 fq=prod_group:men
facet.mincount 1 将返回适用于此过滤器的所有品牌方面。
然后当你对某些颜色进行子过滤时 fq=color:red
您可以使用排除过滤器获得两个方面,一个带有结果,另一个没有过滤器
例如fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand
这将为您提供带过滤器和不带过滤器的方面,您可以使用它们来灰显客户端的差异。
客户端有一点开销,但您只需要执行一个查询。
关于solr - 从 Solr 结果中过滤掉不相关的方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961329/