根据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的问题。
答案 0 :(得分:0)
可能的原因可能是由于以下事实:创建文档时,它不会立即“提交”到索引中。
Elasticsearch索引的工作间隔为refresh_interval,默认值为1秒。
This有关刷新周期的文档很旧,但是我一生都找不到在更现代的ES版本中具有描述性的内容。
您可以尝试一些操作:
请注意,在每次建立索引请求时刷新索引都会导致性能下降,这引出了一个问题,即为什么您试图在建立索引之后立即删除文档。
答案 1 :(得分:0)
添加
deleteByQueryRequest.setAbortOnVersionConflict(false);