默认情况下,es使用文档id来计算具体落在哪个shard上,es根据id查询数据时,es内部是会查询所有shard来找到数据,还是会根据文档id计算文档具体落在哪个shard上来查询

已邀请:

yayg2008

赞同来自: springlet

getById就是去对应的shard去取了。你可以做个试验验证,索引时使用routing属性,然后get时不带routing你看看能否get到。
query的话,就会去查所有shard,除非你指定了routing。

strglee - 公众号: 每日ELK ,每天分享ELK相关知识

赞同来自:

是后者 
https://github.com/elastic/ela ... 23L45

1.jpeg

TransportGetAction 继承了 TransportSingleShardAction(执行单个shard操作的)类
看 TransportSingleShardAction 做了哪些事情
https://github.com/elastic/ela ... -L248

2.jpeg

这个就是获取到文档所在shard_id 然后直接请求该shard

springlet

赞同来自:

谢谢,再请问下,如果查询是包含其他条件的(不包含文档id),程序就会从所有的shard中找到要查询的数据吧

springlet

赞同来自:

谢谢

要回复问题请先登录注册