Django haystack Whoosh SearchQuerySet()。模型(ModelName)不缩小结果范围

2024-10-02 08:29:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个模型和3个索引,如(Modelname1Index,ModelName2Index,Modelname3Index)在搜索中_索引.py. 在

SearchQuerySet().filter是从这三者中搜索,但是我想分别搜索它们中的每一个。在

所以,我试着这样做:

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

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

另外,在执行重建索引时,第三个模型的no objects没有任何行。在

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


Tags: notextnamepy模型modelmodelsrequired
2条回答

不幸的是,.models()过滤器在最新版本的Haystack和Whoosh中不能正常工作。

您可以通过将Haystack降到2.0.0和Whoosh降到2.4.1来解决这个问题。

还要注意,使用Whoosh,在配置中尝试使用HAYSTACK_SEARCH_RESULTS_PER_PAGE时会出现一个bug,因此最好避免此设置。
不过,这也不算太糟。

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代替:

^{pr2}$

相关问题 更多 >

    热门问题