django haystack飞快移动 - SearchQuerySet()。模型(ModelName)没有缩小结果

时间:2013-10-21 17:19:11

标签: python django django-haystack whoosh

我在search_indexes.py中有3个带有3个索引的模型,如(Modelname1Index,ModelName2Index,Modelname3Index)。

SearchQuerySet()。过滤器是从这三个中搜索的,但我想分别搜索它们。

所以,我试着这样做:

SearchQuerySet().filter(text=query).models(required_model_name)

但是,它返回的是整个搜索(来自所有模型)的结果,而不是来自所提到的单个模型。

此外,在进行重建索引时,没有为第三个模型索引的对象,因为该模型没有任何行。

因此,.models(thirdmodel)返回空结果,但.models(其他两个模型中的任何一个)返回整个结果。

2 个答案:

答案 0 :(得分:3)

不幸的是,.models()过滤器无法正常使用Haystack和Whoosh的最新版本。

您可以通过将Haystack降级到2.0.0并将Whoosh降级到2.4.1来解决此问题。

另请注意,使用Whoosh时,在配置中尝试使用HAYSTACK_SEARCH_RESULTS_PER_PAGE时会出现错误,因此您最好避免使用此设置。
但这并不太可怕。

答案 1 :(得分:1)

This is based partlyon James Lims answer,但这适用于任何版本的Haystack和Whoosh。不幸的是,任何一方都没有真正解决这个问题,但下面的解决方案似乎并不太糟糕。

class MySearchQuerySet(SearchQuerySet):
    def models(self,*mods):
        # We have to redefine this because Whoosh & Haystack don't play well with model filtering
        from haystack.utils import get_model_ct
        mods = [get_model_ct(m) for m in mods]
        return self.filter(django_ct__in=mods)

然后SearchQuerySet改为使用MySearchQuerySet

MySearchQuery().filter(name="foo").models(my_models.bar,my_models.baz)