我有3个模型,有3个索引(Modelname1Index,ModelName2Index,Modelname3Index)在search_indexes.py中。
SearchQuerySet().filter是从这三者中搜索出来的,但我想将它们分别搜索。
所以,我试过这样做:
SearchQuerySet().filter(text=query).models(required_model_name)但是,它是从整个搜索(从所有模型)返回结果,而不是从提到的单个模型。
此外,在进行重建索引时,为第三个模型建立索引的no对象,因为该模型没有任何行。
因此,.models(第三个模型)返回的是空结果,而.models(其他两个模型中的任何一个)返回整个结果。
发布于 2013-10-21 18:48:10
不幸的是,.models()过滤器不能正确地处理最新版本的Haystack和Whoosh。
您可以通过将Hay堆栈降级到2.0.0和Whoosh降低到2.4.1来解决这个问题。
还请注意,在您的配置中尝试使用HAYSTACK_SEARCH_RESULTS_PER_PAGE时,您将得到一个bug,所以您最好避免这个设置。
不过,这也不算太可怕。
发布于 2014-11-26 08:13:35
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)https://stackoverflow.com/questions/19500830
复制相似问题