Django Haystack/ElasticSearch索引过程中止

max*_*mus 4 python django django-haystack elasticsearch

我正在运行django 1.4,Haystack 2 beta和ElasticSearch .20的设置.我的数据库是postgresql 9.1,它有几百万条记录.当我尝试使用haystack/elasticsearch索引我的所有数据时,该过程超时并且我收到一条只显示"已杀死"的消息.到目前为止,我已经注意到以下几点:

  1. 我确实得到了要编入索引的文档数量,所以我没有得到像"0索引文档"这样的错误.
  2. 索引一个小集合,例如1000,工作得很好.
  3. 我试过硬编码超时haystack/backends/__init__.py,似乎没有效果.
  4. 我试过更改elasticsearch.yml中的选项也无济于事.

如果硬编码超时不起作用,那么我怎样才能延长索引时间?还有另一种方法可以在ElasticSearch中直接更改吗?或者也许是一些批处理方法?

提前致谢!

Ben*_*tin 6

我冒昧地说问题是生成要发送给ElasticSearch的文档,使用该batch-size选项会帮助你.

ElasticSearch后端中update方法准备要从每个提供的查询集索引的文档,然后为该查询集执行单个批量插入.

self.conn.bulk_index(self.index_name, 'modelresult', prepped_docs, id_field=ID)
Run Code Online (Sandbox Code Playgroud)

所以看起来如果你有一张包含数百万条记录的表,那么update_index在该索引模型上运行将意味着你需要生成数百万个文档然后将它们编入索引.我敢冒险这就是问题所在.使用该--batch-size选项设置批处理限制应限制批处理大小的查询集切片生成的文档.