根据ES documentation文件,索引/删除发生如下:
现在以我为例,我将在时间t向ES发送一个创建文档请求,然后在大约t + 800毫秒处发送一个删除同一文档的请求(使用delete_by_query)。这些请求是通过消息传递系统(kafka的内部实现)发送的,该系统确保仅在从ES接收到针对索引操作的200 OK响应后,才将删除请求发送到ES。
根据ES documentation,仅当在delete_by_query仍在执行期间,删除查询中存在的文档已被更新时,delete_by_query才会引发409版本冲突。
在我的情况下,始终保证只有在收到所有必须删除的文档的200 OK响应后,delete_by_query请求才会发送到ES。因此,不可能在delete_by_query操作期间必须删除的文档进行更新/创建。
如果我缺少某些东西,或者这是ES的问题,请告诉我。
最佳答案
可能的原因可能是由于以下事实:创建文档时,它不会立即“提交”到索引中。
Elasticsearch索引按refresh_interval操作,默认为1秒。
有关刷新周期的This文档很旧,但是我一生都找不到在更现代的ES版本中具有描述性的内容。
您可以尝试一些方法:
请注意,在每个索引请求上刷新索引的性能都很糟糕,这引出了一个问题,即为什么要在建立索引后立即删除文档。
关于elasticsearch - Elasticsearch delete_by_query版本冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382702/