我有一個將模型推送到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