我有一个创建elasticsearch索引的项目。我正在努力提高写入速度。
我读过一些有关自动生成 ids 的内容。
Allowing Elasticsearch to generate ids on your behalf should increase document creation speed since Elasticsearch won’t need to check for uniqueness.
我不能使用它,因为我需要自己的 id 来搜索数据,但我可以保证我生成的 id 是唯一的。有没有办法禁用唯一性检查,以便我可以查看对性能的影响?
如果您的索引始终是插入的(从不更新/更新插入),那么您可以只使用它们的 id (UUID) 并将您的 id 包含为索引字段。您仍然可以根据需要进行搜索。
诀窍是,如果您需要根据您的 id 更新文档,您将需要查看该文档是否已在索引中,这将需要唯一性检查,您不妨保留现有 id 并利用自动唯一性约束和段合并过程。
在 Elasticsearch 中,每个文档在其索引中都必须有一个唯一标识符 (_id)。默认情况下,Elasticsearch 会执行检查以确保这些标识符的唯一性。但是,如果您确信生成的 ID 是唯一的,则可以禁用唯一性检查以潜在地提高写入速度。
要禁用 Elasticsearch 中文档 ID 的自动唯一性检查,您可以配置索引设置以禁用“index.mapping.auto_generate_id”选项。禁用此选项时,Elasticsearch 在索引期间不会检查文档 ID 的唯一性。
以下是禁用 ID 自动生成和文档 ID 唯一性检查的方法:
PUT /your_index_name
{
"settings": {
"index.mapping.auto_generate_id": false
}
}
禁用自动生成 ID 后,您可以继续使用自己的唯一 ID 为文档建立索引。请记住,使用这种方法,Elasticsearch 不会对文档 ID 强制唯一性约束。因此,确保您提供的 ID 在索引中确实是唯一的至关重要。
通过禁用唯一性检查,您可能会观察到写入速度的提高,特别是在外部生成唯一 ID 比依赖 Elasticsearch 的内部检查更快的情况下。但是,请确保彻底测试性能影响并监控 Elasticsearch 集群的行为,以确保禁用唯一性检查符合您的性能要求并且不会损害数据完整性。