ES(Elasticsearch) routing路由以及自定义路由

什么是路由

一个index的数据会被分为多片,每片都在一个shard中。所以说,一个document,只能存在于一个shard中。 当客户端创建document的时候,es此时就需要决定说,这个document是放在这个index的哪个shard上。 这个过程,就称之为document routing,数据路由。当ES散列文档的ID时 就会发生文档的路由,来决定文档应该索引到哪个分片中,这可以由你指定也可以让ES生成。

路由也可以不适用文档的ID,而是定制的数值进行散列。通过指定URL中的routing查询参数,系统将使用这个进行散列,而不是ID,

如下图:

为什么要使用路由?

如果你根本就不使用路由,Elasticsearch将确保你的文档以均衡的方式分布在所有不同的分片中,那么为什么还需要使用路由?定制路由允许你将分享同一个路由值得多篇文档归集到某个分片中,而一旦这些文档放入到同一索引中,就可以路由某些查询,让它们可以在索引分片得子集中执行(简而言之:根据指定的散列值决定相关文档放在哪些分片上)。

路由策略

路由策略需要在两个方面下功夫:在你索引文档的时候挑选合适的路由值,以及在执行查询的时候重用这些值。你首先需要决定一个良好的方式来分隔文档。

对get-together进行路由创建

针对上面3篇文档使用了3中不同的路由值,即denver,boulder,amsterdam。这意味着你使用了这些路由的散列值来决定哪些分片存放这些文档,而不是ID散列值。在索引阶段,这可能没有什么多大帮助;然而在查询阶段使用这些路由的时候,就可以减少数据的查询。如下:

上诉例子Elasticsearch接收到请求,它将对所提供的两个路由值,denver和amsterdam进行散列,然后再存放它们的分片上执行查询。这个例子中,denver和amsterdam散列到同一分片中,而boulder三列岛另一个不同的分片。

试想:如果对于100个分片的索引而言,如果能再索引和查询的时候指定每个分组的路由,你可以限制搜索请求的查询范围,扩展性可以进行很好的提升,同时,再查询的时候,不用在全部100个分片中进行执行,它可以运行得更快,对Elasticsearch得影响就更小。

如何知道路由如何散列。如何确定请求在哪个分片执行?

_search_shards API

可以通过该 API 知道搜索请求在哪些节点和分片上执行

没有路由值得情况下查询信息

有路由值得查询信息

配置路由

可以告诉Elasticsearch你想为所有的文档使用定制路由,并拒绝索引没有定制路由值得文档。如下例

小结

在有大量分片得索引时,路由会很有价值,当然对于Elasticsearch常规使用它并不是必须得。实际使用中,还是要根据项目需求进行调整

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值