2013-05-04 47 views
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上也经历了类似的question这里,但我没有找到任何可靠的答案。

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

@ Rich的答案建议将初始计数保存到会话中,并将其传递到每个请求的上下文中。这似乎是一个更好的解决方案,但我和@StephenPaulger一样担心,因为大部分时间,使用我们产品的用户将打开多个浏览器选项卡,并且这会混淆其他选项卡中的计数。

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

+0

我碰到了同样的问题做到这一点,并最终重新运行查询。我不认为有一个标准的方法来解决这个问题,我想这对干草堆的开发者来说是一个很好的功能要求。 – 2013-05-06 14:17:17

+0

@FacundoOlano:我终于写了我自己的Facet对象,它们跟踪原始计数和新计数并将它们传递给模板,而不是直接使用干草堆的'facet_counts()'方法。 – Amyth 2013-05-07 03:01:57

回答

0

如果您正在使用Solr的后端,你可以把它忽略一个过滤器的一部分的面,像这样:

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

所以你用的地方替换类别我会想象(也许是places_exact)

现在,我试图找出如何与elasticsearch