首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >8.索引数据路由规则

8.索引数据路由规则

作者头像
AI码师
发布2023-10-10 16:55:31
发布2023-10-10 16:55:31
4120
举报

索引路由规则

在 Elasticsearch 中,索引路由规则用于控制文档如何被分配到不同的分片(shard)上。索引路由规则是通过指定文档的某个字段值来决定文档应该被路由到哪个分片。这样可以使得具有相同路由值的文档被存储在同一个分片上,从而提高查询性能和分布式索引的效率。

路由计算一般有三种规计算规则

默认规则

shared_num = hash(_routing) % num_primary_shards 此时_routing = _id

指定routing

shared_num = hash(_routing) % num_primary_shards 此时_routing = 你携带的routing参数值

配置index.routing_partion_size

shared_num = (hash(_routing)+hash(_id) % routing_partion_size) % num_primary_shards 目的是为了避免大量的数据被路由到极少数分片,加上routing_partion_size,对于相同的routing,可以通过routing_partion_size打散开来

使用自定义路由分发数据

定义mapping,启用routing必填

代码语言:javascript
复制
PUT lglbc_routing
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 3
  }, 
  "mappings": {
    "_routing": {
      "required": true
    }
  }
}

添加一条数据

代码语言:javascript
复制
POST lglbc_routing/_doc/1
{
  "id":"1",
  "name":"乐哥聊编程"
}

会出现报错,提示routing需要带上

带上routing,再来一次

代码语言:javascript
复制
POST lglbc_routing/_doc/1?routing=10
{
  "id":"1",
  "name":"乐哥聊编程"
}

请求成功,现在演示搜索,也得带routing

代码语言:javascript
复制
GET lglbc_routing/_doc/1?routing=10

演示查询全部数据,可以不带routing,但是会搜索所有分片

代码语言:javascript
复制
POST lglbc_routing/_search
{
  "query": {"match_all": {}}
}

带上routing,则只会搜索对应routing的分片

代码语言:javascript
复制
POST lglbc_routing/_search?routing=13
{
  "query": {"match_all": {}}
}

删除同样需要带routing

代码语言:javascript
复制
DELETE lglbc_routing/_doc/1?routing=10
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐哥聊编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 索引路由规则
    • 默认规则
    • 指定routing
    • 配置index.routing_partion_size
  • 使用自定义路由分发数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档