elasticsearch - Elasticsearch delete_by_query版本冲突

标签 elasticsearch

根据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版本中具有描述性的内容。

    您可以尝试一些方法:

  • Send _refresh with your request
  • Add ?refresh=wait_for or ?refresh=true param

  • 请注意,在每个索引请求上刷新索引的性能都很糟糕,这引出了一个问题,即为什么要在建立索引后立即删除文档。

    关于elasticsearch - Elasticsearch delete_by_query版本冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55382702/

    相关文章:

    elasticsearch - 为符合特定条件的文档添加排序优先级

    javascript - 仅将少量数据传递给 JSON.parse() 到 Elasticsearch

    elasticsearch - 为什么我的elasticsearch查询缓存是空的?

    elasticsearch - Logstash Un-gzip阵列日志配置

    scala - Prediction.io - pio 训练失败

    elasticsearch - 需要知道如何在Elasticsearch的同一字段中搜索多个关键字

    具有两个字段和 'AND' 过滤器的 ElasticSearch 查询 - Java API

    elasticsearch - 在 Elasticsearch 中获取嵌套数据

    python - 带有 Elasticsearch 后端的 Django Haystack

    elasticsearch - 模糊化现有的ElasticSearch Java API查询