ElasticSearch Mapping之 Routing

添加小编微信 372787553 进入程序员技术交流群
本文已被 ElasticSearch从入门到入魔 收录

Routing

在高可用的集群环境中,创建的索引使用以下公式将文档路由到索引中的特定分片:

shard_num = hash(_routing) % num_primary_shards

用于的默认值是文档的_id_routing

可以通过为每个文档指定自定义值来实现自定义工艺路线模式。例如:routing

PUT my-index-000001/_doc/1?routing=user1&refresh=true 
{
  "title": "This is a document"
}

GET my-index-000001/_doc/1?routing=user1

本文档使用其路由值user1,而不是其 ID

获取、删除或更新文档时需要提供相同的routing值

该字段的值可在查询中访问:_routing

GET my-index-000001/_search
{
  "query": {
    "terms": {
      "_routing": [ "user1" ] 
    }
  }
}

使用自定义路由进行搜索

自定义路由可以减少搜索的影响。无需将搜索请求扇出到索引中的所有分片,只需将请求发送到与特定路由值(或多个值)匹配的分片:

GET my-index-000001/_search?routing=user1,user2 
{
  "query": {
    "match": {
      "title": "document"
    }
  }
}

此搜索请求将仅在与 和 路由值关联的user1 user2分片上执行。

使路由值成为必需

使用自定义传送时,每当索引、获取、删除、更新文档时,请务必提供传送值。

忘记路由值可能会导致文档在多个分片上编制索引。作为保护措施,可以将字段配置为生成所有 CRUD 操作所需的自定义值:

# 所有文件都需要路由。
PUT my-index-000002
{
  "mappings": {
    "_routing": {
    
      "required": true 
    }
  }
}

# 此索引请求将引发 .routing_missing_exception
PUT my-index-000002/_doc/1 
{
  "text": "No routing value provided"
}

具有自定义路由的唯一 ID

当索引文档指定自定义时,不能保证索引中所有分片的唯一性。实际上,如果使用不同的值编制索引,则具有相同内容的文档最终可能会位于不同的分片上。

用户有责任确保 ID 在整个索引中是唯一的。

路由到索引分区

可以配置索引,以便自定义路由值将转到分片的子集,而不是单个分片。这有助于降低最终出现不平衡群集的风险,同时仍可减少搜索的影响。

这是通过在创建索引时提供索引级别设置index.routing_partition_size来完成的。随着分区大小的增加,数据将变得越均匀分布,代价是每个请求必须搜索更多的分片。

当存在此设置时,用于计算分片的公式变为:

shard_num = (hash(_routing) + hash(_id) % routing_partition_size) % num_primary_shards

也就是说,该字段用于计算索引中的一组分片,然后用于选取该集中的分片。

要启用此功能,应具有index.routing_partition_size大于 1 且index.number_of_shards小于 的值。

启用后,分区索引将具有以下限制:

  • 无法在其中创建具有联接字段关系的映射。
  • 索引中的所有映射都必须将_routing字段标记为必需。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值