【问题标题】:Haystack queryset contains None elementsHaystack 查询集包含 None 元素
【发布时间】:2012-05-04 18:38:28
【问题描述】:

我正在使用 Haystack 进行搜索,结果返回的 SearchQuerySet 包含 None 元素:

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

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

我正在使用 Django 1.4、Whoosh 和 Haystack 2.0.0-beta

【问题讨论】:

  • 我还没有尝试过,但是this guy 建议使用 Solr 而不是 Whoosh。
  • 更新:现在我已经尝试过了,它适用于 Solr。
  • 每个人都知道弹性搜索或 solr 的性能更好 - 但对于中小型网站,Whoosh 非常好,恕我直言,安装/设置没有问题(仅在之后,哈哈)。
  • @zimkies 你现在也在使用 solr 吗?
  • @zimkies 两年后有答案,再过两年你可以接受,不是吗? ;-) 至少它是唯一能以某种方式解决问题的答案,并且不建议安装不同的后端 ;-)

标签: django-haystack


【解决方案1】:

当 haystack 索引的记录在 DB 中没有对应记录时,我遇到了这个问题。

【讨论】:

  • 谢谢,但这不是问题。事实证明,“无”值对应于用户对象。显然 models 函数会删除不属于正确模型类型的命中,但会留下 None 类型而不是过滤掉它们
  • 你不能说,这个问题只针对'whoosh'后端吗?使用 Solr 引擎能解决吗?
  • 那么 Whoosh 没有解决方案?
【解决方案2】:

不,这绝对不是预期的行为,而且正如我所见,它似乎与 Whoosh 中的设计决策有关。而且,截至 2015 年 12 月,这似乎仍然是一个问题,如 here 所示。此外,我可以使用我的设置(django 1.8.5、haystack 2.4.1、Whoosh 2.7.0)重现它——这就是我来到这里的原因。

对我有用的快速而肮脏的解决方案:在索引上定义一个新字段(类型/模型/番茄),为每个模型设置相同的字段,然后过滤该值:

.filter(type='my_modelname')

而不是

.models(MyModel).

我(还)不知道这是如何扩展的,但似乎可以正常工作。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      • 2012-03-31
      • 2012-12-01
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多