假设我有2个具有以下ID的文档:编号0001编号0002既然我强制使用了文档的id,ElasticSearch如何将其放置在碎片中?ElasticSearch是否会将所有这些都放置在同一个碎片中?换句话说,ElasticSearch如何计算将文档放置在碎片中的什么位置?
pw9qyyiw1#
每个文档is routed到特定的碎片取决于它的_routing值,默认为它的ID哈希。
_routing
routing = _routing != null ? hash(_routing) : hash(_id)routing_factor = num_routing_shards / num_primary_shardsshard_num = (hash(_routing) % num_routing_shards) / routing_factor
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肯定会位于两个不同的碎片上,前提是您的索引具有多个主碎片
shard_num
_id
id0001
id0002
1条答案
按热度按时间pw9qyyiw1#
每个文档is routed到特定的碎片取决于它的
_routing
值,默认为它的ID哈希。因此,
shard_num
将是特定_routing
值或文档的_id
值的散列的直接函数。在您的示例中,
id0001
和id0002
肯定会位于两个不同的碎片上,前提是您的索引具有多个主碎片