我有一个将模型推送到elasticsearch的django应用程序。我有一个后保存更新后的信号,但想写一个更新所有文档的批处理命令。弹性搜索中删除陈旧文档的最佳做法
在这个过程中,我想删除变成陈旧的文档(例如,在数据库中设置为不活动,被删除等)。
我开始是这样的:
- 更新所有文件和存储更新/创建的ID。
- 创建一个巨大的排除查询
- 删除那些匹配
事情是这样的所有文件:
for i in updated_ids:
q = Q('match', **{'id': i})
f = f | q if f else q
queryset = dt.search().query(Bool(filter=[~Q(f)]))
for stale in queryset.scan():
stale.delete()
但查询变得漫长而失败。
我不知道是否有更有效的方法来做到这一点。
我在elasticsearch.py上使用elasticsearch-dsl。 Django-Haystack不是一种选择。
为什么更新所有的文件,你的意思是说,即使单个文档的更新,你做的批量更新。 – user3775217