我正在研究 solr 搜索结果的方面。我无法让各个方面按照我想要的方式显示。我希望能够在一个方面选择一个值,并且仅在其他方面更新计数,而不会在方面计数为 0 时删除值。
例子
我搜索了衬衫,以下是返回的面及其计数:
颜色:
[ ] 红色 (10)
[ ] 蓝色 (10)
[ ] 绿色 (10)
尺寸:
[ ] 小 (5)
[ ] 中 (10)
[ ] 大 (10)
现在,如果我选择红色,我希望我的面也这样更新:
颜色:
[x] 红色 (10)
[ ] 蓝色 (10)
[ ] 绿色 (10)
尺寸:
[ ] 小 (0)
[ ] 中 (5)
[ ] 大 (5)
我让它工作,这样选择颜色就不会限制颜色方面的选项,但我无法弄清楚如何通过调整我得到的排除来显示正确的方面:
尺寸:
[ ] 中 (5)
[ ] 大 (5)
或:
尺寸:
[ ] 小 (5)
[ ] 中 (10)
[ ] 大 (10)
我尝试添加facet.limit=-1,但它似乎没有做任何事情,也许是一个错误,因为我期望这能做我正在寻找的事情?我正在运行 solr 4.3.1。
这是我的查询:
q=chair&rows=10&start=0&facet.limit=-1&defType=edismax&facet.field={!ex=colortag}color&facet.field={!ex=sizetag}size&facet=true&fq={!tag=colortag}color:red&fl=*,分数
Solr 可以做到这一点吗?我还没有遇到过任何这样的例子,我担心解决方案是在前端使用缓存来处理它,但这不起作用。
编辑
所以我添加了facet.mincount=0,它确实给了我想要的东西,但没有给我我想要的东西。问题是,现在将 mincount 设置为 0,我得到了不属于搜索结果的所有方面。这就是我想要的:
颜色:
[x] 红色 (10)
[ ] 蓝色 (10)
[ ] 绿色 (10)
尺寸:
[ ] 小 (0)
[ ] 中 (5)
[ ] 大 (5)
但我实际得到的是:
颜色:
[x] 红色 (10)
[ ] 蓝色 (10)
[ ] 绿色 (10)
[ ] 橙色 (0)
[ ] 紫色 (0)
[ ] 粉色 (0)
尺寸:
[ ] 小 (0)
[ ] 中 (5)
[ ] 大 (5)
[ ] 超大 (0)
[ ] XX 大 (0)
所以现在我添加了与查询词不匹配的颜色和尺寸。我意识到它工作正常,但这不是我想要的工作方式。我可以采取另一种方法吗?我确实意识到我可以进行一次调用来获取没有任何选定方面的初始结果,然后进行第二次调用以获取过滤后的方面,然后进行比较并构建出正确的结果。我不想打两次电话,所以任何帮助将不胜感激。
最佳答案
不要排除 size
的构面,使用 facet.mincount=0
和 facet.limit
q=chair&rows=10&start=0&facet.limit=-1&defType=edismax&facet.field={!ex=colortag}color&facet.field=size&facet=true&fq={!tag=colortag}color:red&fl=*,score
关于Solr 多选事实忽略其他选定的方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622859/