elasticsearch 搜索指定路由 setRouting

发现es api的 SearchRequestBuilder里面有一个setRouting方法,里面的解释是这样的:

A comma separated list of routing values to control the shards the search will be executed on
 
官方说明的搜索过程 是 请求去所有的分片(0 1 2三个分片中的主或副之一)中获取结果,最后汇总取top。
那么如果我在这里指定了routing,是不是意味着只会去路由到的分片获取数据,而不去所有的分片了?
 
如果是的话,也就意味着  假设如果我的索引带路由字段cityId,那么我每次查询都带着cityId作为条件,再把路由带上,其实性能会有所提高,毕竟不用去其它分片走一次了,IO次数少了; 但是如果路由指定不当,可能会查不到数据或数据少,因为有数据的分片不被遍历了。
 
不知道我这个理解对不对
已邀请:

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

赞同来自:

基本是对的,个性化路由分配的原则要跟你搜索业务相关。比如同城业务可以根据city分配,商城业务可以根据商品分类分配。如果业务不明确,路由指定不当的情况就比较多。可以这样简单理解,指定路由搜索就是加一层filter查询,filter不明确,搜索的数据就不准确了。

要回复问题请先登录注册