0

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 上也遇到了类似的问题,但我没有找到任何可靠的答案。

@DanielRoseman 的回答建议每次用户通过方面提出请求时重新运行一个空查询。我不确定为每个请求进行两次查询是否是一个好主意。这不会减慢整个过程吗?

@Rich 的回答建议将初始计数保存到会话中,并将其与每个请求一起传递给上下文。这似乎是一个更好的解决方案,但我和@StephenPaulger 有同样的担忧,因为大多数时候使用我们产品的用户会打开多个浏览器选项卡,这会弄乱其他选项卡中的计数。

还有什么可以做的来实现这一点。为什么如此重要的功能不是干草堆项目本身的一部分?

4

1 回答 1

0

如果您使用的是 solr 后端,则可以让它忽略过滤器的一部分,如下所示:

# facet by category but disregard any category filters on this query
squeryset = squeryset.facet('{!ex=category}category')  

所以对于你的用我想象的地方替换类别(可能是places_exact)

现在我正在尝试使用elasticsearch来解决这个问题

于 2014-03-31T12:40:14.067 回答