【发布时间】:2022-10-25 14:24:41
【问题描述】:
假设我有 2 个具有以下 ID 的文档:
id0001 id0002
由于我强制文档的 ID,弹性搜索如何将其放置在分片中? elasticsearch 会将所有这些放在同一个分片中吗?换句话说,弹性搜索如何计算文档在分片中的放置位置?
【问题讨论】:
标签: elasticsearch elastic-stack spring-data-elasticsearch
假设我有 2 个具有以下 ID 的文档:
id0001 id0002
由于我强制文档的 ID,弹性搜索如何将其放置在分片中? elasticsearch 会将所有这些放在同一个分片中吗?换句话说,弹性搜索如何计算文档在分片中的放置位置?
【问题讨论】:
标签: elasticsearch elastic-stack spring-data-elasticsearch
每个文档 is routed 到一个特定的分片取决于它的 _routing 值,默认为它的 ID 哈希。
routing = _routing != null ? hash(_routing) : hash(_id)
routing_factor = num_routing_shards / num_primary_shards
shard_num = (hash(_routing) % num_routing_shards) / routing_factor
所以shard_num 将是特定_routing 值或文档_id 值的散列的直接函数。
在您的示例中,id0001 和 id0002 肯定会落在两个不同的分片上,前提是您的索引有多个主分片
【讨论】: