solr - 从 Solr 结果中过滤掉不相关的方面

标签 solr facet

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

说我是一家鞋店。在我的网站上,我有三个页面:一个是男鞋,一个是女鞋,一个是童鞋。假设我的鞋表有字段 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/

相关文章:

java - 所选方面不应使用 hibernate 搜索过滤自己的组

r - ggplot : update facet labels with number of points in the plot

r - 使用 2 个变量的 facet_wrap 更改 strip.text 的颜色

ubuntu中集成solr后tomcat启动报错

r - ggplot2 跨组中的嵌套方面

r - ggplot2 stat_function 具有计算参数的 facet_grid 内不同数据子集

多值字段的 solr 模式

tomcat - 我们可以将 solr 索引从一台服务器传输到另一台服务器而不是重新索引吗

php - XML文档的 Multi-Tenancy 全文搜索,SOLR

java - solr 不能删除任何东西