根据 ES文档,文档索引/删除发生如下:
现在,就我而言,我在时间 t 向 ES 发送创建文档请求,然后在大约 t+800 毫秒发送删除同一文档的请求(使用 delete_by_query)。这些请求通过消息系统(kafka的内部实现)发送,该系统确保只有在收到来自ES的索引操作的200 OK响应后,删除请求才会发送到ES。
根据ES文档,仅当删除查询中存在的文档在delete_by_query仍在执行期间已更新时,delete_by_query才会引发409版本冲突。
就我而言,始终保证仅当收到所有必须删除的文档的 200 OK 响应时,delete_by_query 请求才会发送到 ES。因此,在delete_by_query操作期间不可能更新/创建必须删除的文档。
如果我遗漏了什么或者这是 ES 的问题,请告诉我。
可能的原因可能是由于创建文档时,它没有立即“提交”到索引。
Elasticsearch 索引按刷新间隔运行,默认为 1 秒。
关于刷新周期的文档很旧,但我一生都找不到更现代的 ES 版本中的描述性内容。
您可以尝试以下几件事:
请注意,在每个索引请求上刷新索引对性能来说非常糟糕,这引出了一个问题:为什么您试图在索引文档后立即删除它。
小智 5
添加
deleteByQueryRequest.setAbortOnVersionConflict(false);
Run Code Online (Sandbox Code Playgroud)