使用 dmesg 来查看一些硬件或驱动程序的信息或问题。

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

Elasticsearch | 作者 springlet | 发布于2018年04月25日 | 阅读数:2690

系统提示:这个人太懒了,什么问题描述都没有写!

已邀请:

yayg2008

赞同来自: springlet

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

strglee

赞同来自:

是后者 
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

赞同来自:

谢谢

要回复问题请先登录注册