7

在 Elasticsearch 6.0 中删除了映射类型后,我想知道文档 ID 是否保证在索引中是唯一的?

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

4

2 回答 2

11

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

于 2018-02-08T07:20:32.903 回答
2

显式 ID

如果您在索引时显式设置文档 ID,则没有什么能阻止您对进入不同索引的文档两次使用相同的 ID。

自动生成的 ID

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

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

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

于 2019-08-28T13:18:03.837 回答