【问题标题】:Are IDs guaranteed to be unique across indices in Elasticsearch 6+?在 Elasticsearch 6+ 中,ID 是否保证在索引中是唯一的?
【发布时间】:2018-07-17 18:19:58
【问题描述】:

在 Elasticsearch 6.0 中映射类型为 removed 我想知道文档 ID 是否保证在索引中是唯一的?

假设我有三个索引,所有索引都有一个包含 ID 的“父”字段。在查找具有给定 ID 的文档时,我是否需要包含该 ID 所属的索引,或者我可以只搜索所有三个索引吗?

【问题讨论】:

    标签: elasticsearch search elasticsearch-6


    【解决方案1】:

    ID 在索引中不是唯一的。 如果你想引用一个文档,你需要知道索引名称和 ID。

    【讨论】:

    • 只是在接受作为答案之前确定一下,你有这个来源吗?
    • 我们会的,我是 Elasticsearch 团队的工程师,所以我可以引用自己作为来源吗?但无论如何,这直接意味着您可以显式设置 ID。只需测试一下:创建 3 个索引,并在每个索引中放置一个 ID 为 1 的文档。
    • @Tim 在仅使用自动生成的 ID 时仍然有效吗?我的意思是,如果我们让 ES 生成每个文档 ID,我们应该期望有重复吗?
    • 这个答案是否与文档相矛盾:elastic.co/guide/en/elasticsearch/reference/current/…?如果链接被破坏,请引用文档中的一句话:“每个文档都有一个唯一标识它的 _id”。那里没有关于索引之间潜在冲突的信息。当然,我们现在处于下一个版本中。
    • 您对文档的阅读量超出了预期。 _id 仅唯一标识索引中的文档,它不是整个集群(或全局)的唯一标识符。
    【解决方案2】:

    显式 ID

    如果您在索引时明确设置文档 ID,没有什么可以阻止您对进入不同索引的文档两次使用相同的 ID。

    自动生成的 ID

    如果您不在索引时设置 ID,ES 将在存储文档之前生成一个。
    根据code,ID 是由随机数、主机 MAC 地址和当前时间戳(以毫秒为单位)安全生成的。完成了额外的工作以确保时间戳(以及 ID 序列)单调增加。

    要生成相同的 ID,当 JVM 启动时,必须选择一个特定的随机数,并且必须在特定时刻以亚毫秒精度生成文档 ID。 所以虽然机会存在,但它太小了,我不会在意。(就像我在使用哈希函数检查文件完整性时不会关心冲突)

    最后说明:作为代码注释说明,实现是不透明的,可能随时更改,所以我写的内容在未来的版本中可能不适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2015-08-10
      • 2016-03-15
      • 2015-01-30
      • 2019-01-14
      • 2015-09-16
      相关资源
      最近更新 更多