我有一个将模型推送到弹性搜索的 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 不是一个选项。