【发布时间】:2018-07-17 18:19:58
【问题描述】:
在 Elasticsearch 6.0 中映射类型为 removed 我想知道文档 ID 是否保证在索引中是唯一的?
假设我有三个索引,所有索引都有一个包含 ID 的“父”字段。在查找具有给定 ID 的文档时,我是否需要包含该 ID 所属的索引,或者我可以只搜索所有三个索引吗?
【问题讨论】:
标签: elasticsearch search elasticsearch-6
在 Elasticsearch 6.0 中映射类型为 removed 我想知道文档 ID 是否保证在索引中是唯一的?
假设我有三个索引,所有索引都有一个包含 ID 的“父”字段。在查找具有给定 ID 的文档时,我是否需要包含该 ID 所属的索引,或者我可以只搜索所有三个索引吗?
【问题讨论】:
标签: elasticsearch search elasticsearch-6
ID 在索引中不是唯一的。 如果你想引用一个文档,你需要知道索引名称和 ID。
【讨论】:
_id 仅唯一标识索引中的文档,它不是整个集群(或全局)的唯一标识符。
如果您在索引时明确设置文档 ID,没有什么可以阻止您对进入不同索引的文档两次使用相同的 ID。
如果您不在索引时设置 ID,ES 将在存储文档之前生成一个。
根据code,ID 是由随机数、主机 MAC 地址和当前时间戳(以毫秒为单位)安全生成的。完成了额外的工作以确保时间戳(以及 ID 序列)单调增加。
要生成相同的 ID,当 JVM 启动时,必须选择一个特定的随机数,并且必须在特定时刻以亚毫秒精度生成文档 ID。 所以虽然机会存在,但它太小了,我不会在意。(就像我在使用哈希函数检查文件完整性时不会关心冲突)
最后说明:作为代码注释说明,实现是不透明的,可能随时更改,所以我写的内容在未来的版本中可能不适用。
【讨论】: