簡體   English   中英

django haystack Whoosh-SearchQuerySet()。models(ModelName)不會縮小結果范圍

[英]django haystack Whoosh - SearchQuerySet().models(ModelName) not narrowing results

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

SearchQuerySet()。filter是從所有三個搜索,但是我想分別搜索它們。

因此,我嘗試這樣做:

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

但是,它返回的是整個搜索的結果(來自所有模型),而不是所提到的單個模型。

另外,在進行重建索引時,沒有索引為第三個模型建立索引的對象,因為該模型沒有任何行。

因此,.models(thirdmodel)返回空結果,但是.models(其他兩個模型中的任何一個)返回整個結果。

不幸的是, .models()過濾器無法與最新版本的Haystack和.models()一起正常使用。

您可以通過將Haystack降級為2.0.0,將Whoosh降級為2.4.1來解決此問題。

另請注意,使用HAYSTACK_SEARCH_RESULTS_PER_PAGE在嘗試在配置中使用HAYSTACK_SEARCH_RESULTS_PER_PAGE時出現錯誤,因此最好避免使用此設置。
不過,這並不可怕。

這部分基於James Lims的答案 ,但這對任何版本的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM