我在其中一个项目中使用django-haystack
,并使用faceting
功能显示不同字段的构面。目前,方面看起来像这样:
Places
- New York (51)
- Los Angeles (22)
- Chicago (20)
- Houston (38)
- Philadelphia (15)
Price Range (in USD)
- $2000 - $4000 (10)
- $4000 - $6000 (15)
- $6000 - $10000 (8)
- $10000 - $15000 (4)
目前发生的情况是,如果我点击地点中的任何一个链接(例如纽约),Places
的方面计数会更新。它看起来像:
Places
- New York (51)
- Chicago (3)
- Los Angeles (1)
- Houston (0)
- Philadelphia (0)
然后如果我点击另一个地方说洛杉矶的计数变为类似
Places
- Los Angeles (22)
- Philadelphia (3)
- New York (1)
- Chicago (0)
- Houston (0)
我要做的不是向下钻取选定的方面,而是向下钻取所有其他方面。因此,如果我点击一个地方,我希望地方方面保持相同的顺序并显示原始计数,但显示其他方面以显示嵌套结果计数。因此,如果我点击上面提到的原始方面中的一个位置,结果看起来像这样。 (假设我点击纽约:)
Places #The Original Count and order is maintained here
- New York (51)
- Los Angeles (22)
- Chicago (20)
- Houston (38)
- Philadelphia (15)
Price Range (in USD) # This facet has the updated result count
- $2000 - $4000 (2)
- $4000 - $6000 (5)
- $6000 - $10000 (1)
- $10000 - $15000 (0)
我怎样才能做到这一点?
我在stackflow上也经历过类似的question,但我没有找到任何可靠的答案。
@ DanielRoseman的回答建议每次用户通过facet发出请求时重新运行一个空查询。我不确定是否对每个请求进行两次查询是一个非常好的主意。这不会减缓整个过程吗?
@ Rich的回答建议将初始计数保存到会话中,并将其传递给每个请求的上下文。这似乎是一个更好的解决方案,但我和@StephenPaulger有同样的担忧,因为大多数时候使用我们产品的用户将打开多个浏览器标签,这会搞乱其他标签中的计数。
还有什么可以做到这一点。为什么这样一个重要的功能不是干草堆项目本身的一部分?
答案 0 :(得分:0)
如果你正在使用solr后端,你可以让它忽略过滤器的一部分,如下所示:
# facet by category but disregard any category filters on this query
squeryset = squeryset.facet('{!ex=category}category')
所以你们用我想象的地方替换类别(可能是places_exact)
现在我正在尝试使用elasticsearch
来解决这个问题