Rebuild_index 不更新新项目 Haystack Elasticsearch Django

Rebuild_index does not update new items Haystack Elasticsearch Django

一直在四处寻找这个解决方案,但找不到任何东西。我刚开始使用 Haystack == 2.6.1,正在使用 Elasticsearch==2.4.1 和 Elasticsearch 服务器 2.4.6。在关注 haystack 的 getting started 之后,我能够执行搜索并获得结果。在我运行

之后
python manage.py rebuild_index

它第一次成功是因为就像我说的那样我能够执行搜索。但是后来我向我的数据库添加了 3 个条目并尝试重建 and/or 更新索引。但现在我看到了这个:

RuntimeWarning: DateTimeField Order.dateEntered received a naive datetime (2017-11-11 16:07:54.324473) while time zone support is active.
  RuntimeWarning)
Indexing 32 orders
GET /haystack/_mapping [status:404 request:0.004s]

所以当我搜索时,我仍然看不到我的新条目。我现在有 35 个订单(它只索引了 32 个)并且我看到了 GET /haystack/_mapping 的这个 404 响应。 对不起,我是新手所以有些问题可能看起来很愚蠢:

  1. haystack 期望得到什么;我有一个用于 elasticsearch 的本地服务器 运行ning,但是否也应该有一个 haystack 服务器?
  2. haystack 会不会因为天真的日期时间警告而无法索引新项目?
  3. 我每次向数据库添加新项目时都必须重新启动 elasticsearch 服务器吗?

更新:早上我重新启动了 elasticsearch 服务器并重新运行 python manage.py rebuild_index 然后它在索引过程中捕获了所有 35 个!但是我尝试再次添加一个条目并重新运行它,它仍然只索引 35 个项目 - 现在我有 36 个所以它 应该 索引 36 个项目。

事实证明:

RuntimeWarning: DateTimeField Order.dateEntered received a naive datetime (2017-11-11 16:07:54.324473) while time zone support is active.
  RuntimeWarning)

是问题所在。在 search_index.py 中,它根据 index_queryset 函数进行更新。从 'Getting Started' 文档 index_queryset 应该是这样的:

def index_queryset(self, using=None):
    """Used when the entire index for model is updated."""
    return self.get_model().objects.filter(pub_date__lte=datetime.datetime.now())

但是由于 pub_date 不是正确的时区,或者因为它是一种天真的格式 rebuild_index 没有提取最新的项目。所以我使用了 django.utils 时区日期:

from django.utils import timezone

def index_queryset(self, using=None):
    """Used when the entire index for model is updated."""
    return self.get_model().objects.filter(pub_date__lte=timezone.now())