Solr复杂分面检索

4
我在使用 faceting 时遇到了问题。假设产品可能属于多个类别,这是 faceting 的常见行为:
类别
- Android(25) - iPhone(55) - 其他(25)
现在当我选择“Android”时,我会用 “fq” => “category:Android” 新建一个查询,结果如下:
类别
- Android - iPhone(15) - 其他(2)
但这意味着有15个产品既属于“Android”,也属于“iPhone”。我想要的是这样的效果:(“Android”或“iPhone”)
类别
- Android - iPhone(+5) - 其他(+1)
这意味着我通过选择“Android(25)”可以得到25个结果,并且通过选择“iPhone(+5)”可以再获得5个结果,最终获得30个搜索结果。
请问是否有人知道 SOLR 的 faceting 是否支持此功能?还是需要使用多个查询并手动计算?
感谢您的建议!

选择“Android”后,您将获得25个结果,其中15个还属于“iPhone”类别。如果添加“iPhone”,您将不会获得30个结果。使用AND将获得15个结果。如果使用OR,则将获得25 + 55个结果。那么这额外的5个结果从哪里来呢? - morja
如果您使用OR,您将获得25+55个结果。如果产品只能属于一个类别,那么这是正确的。但在我的情况下,它可以属于多个类别,因此OR会给我30个结果。 - user987220
2个回答

3
根据您需要的所有排列组合,您可能需要查看查询外观,以使您能够获取任意查询的计数。例如,您可以执行facet.query=category:("Android" OR "iPhone"),并获得基于category:("Android" OR "iPhone")的计数结果。而且,您可以为任何想要计算数量的查询执行此操作。所以,在您的情况下,您可能可以通过直接字段外观和查询外观的某些组合来达到最终解决方案。

编辑:重新阅读您的问题,您可能还希望研究标记和排除额外fq的部分,这取决于您如何允许用户“选择”选择。 (文档中的示例与您原始设置非常接近,尽管我不确定最终行为是否完全符合您的要求)。


谢谢您的建议,我一定会仔细研究,但是nikhil500的回答正是我所需要的。 - user987220

3
尝试使用选择的负面进行新的查询,例如"fq" => "-category:Android" - 然后您应该可以获得您所需的分面统计信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接