【问题标题】:Does Elasticsearch execute operations in a specific order?Elasticsearch 是否按特定顺序执行操作?
【发布时间】:2022-09-27 15:19:07
【问题描述】:

我读到 ES 是near real-time,因此所有索引/创建/更新/删除等操作都不会立即执行。

假设我指数3个文件相同的身份证,按此顺序,每个之间有 1 毫秒,然后强制刷新

{
  \"_id\": \"A\",
  \"_source\": { \"text\": \"a\" }
}

{
  \"_id\": \"A\",
  \"_source\": { \"text\": \"b\" }
}

{
  \"_id\": \"A\",
  \"_source\": { \"text\": \"c\" }
}

然后,如果我搜索 id 为 \"A\" 的文档,我会得到 1 个结果,但是哪个?

当 Elasticsearch 执行刷新时,它是否按照到达的顺序依次执行操作?

  • 您对 3 个文档使用相同的 id,会发生插入,然后是 2 个更新。最后,您将在数据库中只有一个文档。
  • 是的,我的问题是:哪一个?如果 ES 并行执行操作,它可以用 \"b\" 创建 doc,然后用 \"a\" 更新,然后是 \"c\",所以我会得到文档 \"c\"。但是顺序是已知的吗?我们可以预测吗?

标签: elasticsearch


【解决方案1】:

在这种情况下,它将归结为您采用哪种索引方法

批量请求并不能保证您提交它的顺序是如何应用的。它可能与您的(某些)测试的顺序相同,但不能保证 Elasticsearch 在那里提供

您可以通过在文档中指定 version 来管理此问题,因此文档的更高版本始终是索引的内容

将订购使用 3 个单独的 POSTs 进行索引,因为您将一个接一个地发出 3 个单独和连续的请求。这是因为每个请求都具有相同的_id,并且将被定向到相同的分片并按照接收它们的顺序进行操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多