2012-05-04 98 views
8

我使用草垛搜索,并将得到的SearchQuerySet返回包含无元素:草堆查询集包含无元素

>> SearchQuerySet().models(Question, Document, Idea) 
>> [<SearchResult: idea.idea (pk=3875)>, None, None, None] 

运行rebuild_index没有帮助。如果我从第一行删除.models()调用,问题就会消失。我可以从结果中筛选出无元素,但我想知道这是否是预期行为?

我使用Django 1.4,嗖的一声,和草堆2.0.0-β

+1

我还没试过,但[这家伙](https://groups.google.com/forum/?fromgroups#!searchin/django-haystack/none/django-haystack/XSjIr8wx3lA/7f82x2QJ9cUJ)建议使用Solr而不是Whoosh。 – simlmx

+0

更新:现在我已经尝试过它,它与Solr一起使用。 – simlmx

+0

大家都知道,弹性搜索或solr做的更好 - 但对于中小型网站,Whoosh非常好,恕我直言,并没有安装/设置(仅此后,哈哈)的麻烦。 – benzkji

回答

4

时草垛指数有记录,而不在数据库做相应记录。我有这个问题。

+3

谢谢,这不是问题。事实证明'None'值对应于User对象。显然,_models_函数删除了不是正确模型类型的匹配,而是留下了一个None类型,而不是将它们滤除掉 – zimkies

+0

难道你不能说这个问题只是针对'whoosh'后端吗?使用Solr引擎解决它吗? – Daria

+1

那么对于Whoosh没有解决方案呢? – awidgery

1

使用Whoosh时出现同样的问题,安装Elasticsearch和None元素消失了。

3

不,这是明确的不是预期的行为,而且我可以看到,似乎与飞快的设计决定有关。而且,截至2015年12月,这仍然是一个问题,可以看到here。另外,我可以用我的设置(django 1.8.5,haystack 2.4.1,whoosh 2.7.0)重现它 - 这就是我来到这里的原因。

快速和肮脏的解决方案,为我工作:你的指数(类型/型号/番茄)定义一个新的领域,将其设置相同的每个模型和过滤针对值:

.filter(type='my_modelname')

而不是

.models(MyModel)

我不知道(但)如何缩放,但似乎工作正常。

+1

该解决方法效果相当好! – mbo