一个document通过以下公式被路由到该索引下一个特定的分片:

shard_num = hash(_routing)  % num_primary_shards

_routing的默认值是文档的_id或者文档的_parent ID。
自定义路由可以通过指定每个文档的routing值来实现。
例如:

curl -X PUT "http://localhost:9200/my_index/my_type/1?routing=user1&refresh=true" -H 'Content-Type: application/json' -d'
{
"title": "This is a document"
}
'
curl -X GET "http://localhost:9200/my_index/my_type/1?routing=user1"

1. 这个文档通过使用user1作为路由值,代替了ID

2. 相同的路由值需要在getting、deleting或者updating时提供。
这个_routing 域在查询时使用的例子:

curl -X GET "http://localhost:9200/my_index/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"terms": {
"_routing": [ "user1" ]
}
}
}'

使用自定义路由搜索

自定义路由可以降低搜索的冲击。一个请求被直接匹配路由值的分片上,而不是分散在索引的所有分片中。

curl -X GET "http://localhost:9200/my_index/_search?routing=user1,user2" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"title": "document"
}
}
}
'

这个搜索将被在关联user1、user2路由值的分片上执行。

如果使用自定路由,这个路由值在索引、查新、删除、更新时提供时非常重要的。如果忘记这个路由值将会导致这个文档在更多的分片上查找。作为一个保障,这个_routing域可以配置在mapping中,以保障在CRUD操作中必须提供该值。

curl -X PUT "http://localhost:9200/my_index2" -H 'Content-Type: application/json' -d'
{
"mappings": {
"my_type": {
"_routing": {
"required": true
}
}
}
}
'
curl -X PUT "http://localhost:9200/my_index2/my_type/1" -H 'Content-Type: application/json' -d'
{
"text": "No routing value provided"
}
'

1. 路由必须在my_type文档中

2. 这个索引请求将会抛出routing_missing_exception异常。
当自定了索引文档的_routing,则_id的唯一性将不能保证其在索引下所有分片中的唯一性。事实上,即使一个拥有相同_id的文档同样可能被分配在不通的分片中通过不同的_routing值。这就要求用户来保证这个IDS在全索引下的唯一性。

路由索引分区
一个索引可以配置自定义路由到一个分片子集的路由值而不是单一的分片。这个将减小集群不均衡的风险,同时,也可以减小搜索的压力。
这个可以在创建索引时,配置index.routing_partition_size参数完成。随着分区值的增加,分布更加均匀的数据将导致搜索在更多分片完成(这个其实是增加了搜索成本的)。
当提供了这个参数,则计算公式将变成:

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

这样,通过_routing域计算出一个分片集合,然后通过_id来选择分片集合中的一个分片。

为了保证这个特性,index.routing_partition_size值必须是大于1同时小雨index.number_of_shards的值。
一旦应用,这个索引将有以下限制:

  • Mapping中不能配置父子关系
  • 在索引的映射中必须有_routing字段。

参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping-routing-field.html

_routing字段介绍的更多相关文章

  1. Unihan(统汉字)常用字段介绍

    0 背景 1 文件 1.1 IRG Sources 1.2 Dictionary Indices 1.3 Dictionary-like Data 1.4 Other Mappings 1.5 Rad ...

  2. ORM常用字段介绍

    Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ...

  3. CDR话单主要字段介绍

    l  Time of call connection RRC连接时的时间,格式:yyyy年mm月dd日hh时mm分ss秒 l  Call Setup Time per sections 呼叫建立时长 ...

  4. ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex

    摘自:https://es.xiaoleilu.com/070_Index_Mgmt/31_Metadata_source.html The _source field stores the JSON ...

  5. django的models字段介绍

    #增加数据库数据方法#方法1CalcData.objects.create(var1 ='21',var2='22')#方法2obj =CalcData(var1 ='21',var2='22')jo ...

  6. ecshop数据库结构和字段介绍(转载)

    ecs_account_log:账户变动日志(注册用户充值.支付等记录信息)字段 类型 Null 默认 字段说明log_id mediumint(8) 否 无 日志IDuser_id mediumin ...

  7. Django Form 的主要内置字段介绍

    修改 urls.py,添加 path('field.html', views.field), 在 templates 下创建 field.html, 内容如下: <!DOCTYPE html&g ...

  8. ES 13 - Elasticsearch的元字段 (_index、_type、_source、_routing等)

    目录 1 标识元字段 1.1 _index - 文档所属的索引 1.2 _uid - 包含_type和_id的复合字段 1.3 _type - 文档的类型 1.4 _id - 文档的id 2 文档来源 ...

  9. podspec文件介绍

    podspec文件是cocopods引入的第三方代码库的配置索引文件 它的创建命令是:$pod spec create TestFile podspec文件的常用配置字段介绍 Pod::Spec.ne ...

随机推荐

  1. Zstack中任务,事件,消息之间的关系

    Zstack是Zigbee协议的具体实现,在实现的过程中为了能够更好的对各个模块和功能进行管理,所以加入了OSAL(Operating System Abstraction Layer 操作系统抽象层 ...

  2. $(document).ready(function(){})和$(window).load(function(){})的区别

    页面加载完成有两种状态: 1.Ready:表示文档结构已经加载完成,不包含图片等非文字媒体文件,在Dom节点创建完成后执行,如果有多个定义则依次执行 $(document).ready(functio ...

  3. powershell如何查看以及设置环境变量

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_environment ...

  4. webservice获取天气信息

    效果 1.eclipse中新建一个Java项目 2.通过命名获取天气的客户端信息 首先,打开天气网站http://ws.webxml.com.cn/WebServices/WeatherWS.asmx ...

  5. jquery实现全选/全不选

    //设置全选全不选$("#checkAll").click(function () { if ($("#checkAll").attr("checke ...

  6. Gogeos安装

    环境要求: Windows64,Go,minGW(统一64位) 1.安装geos 下载GEOS 3.3.8源码,解压后,按readme文件编译(基于VS2010的64位编译工具执行的nmake编译命令 ...

  7. static、final和finalize详解

    一.static 修饰符 数据共享 成员变量(实例变量)和静态变量(类变量)的区别 两个变量的生命周期不同 成员变量随对象的创建而存在,随对象被回收而释放 静态变量随类的加载而存在,随类的消失而消失 ...

  8. 编译libmemcached

    php的扩展memcache,不支持cas,所以我们要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached 一.下载软件 1.libme ...

  9. ReverseLinkedList,ReverseLinkedList2,链表反转问题

    ReverseLinkedList: public class ReverseLinkedList { public ListNode reverseList(ListNode head) { if( ...

  10. 第五章:异步Web服务

    到目前为止,我们已经看到了许多使Tornado成为一个Web应用强有力框架的功能.它的简单性.易用性和便捷性使其有足够的理由成为许多Web项目的不错的选择.然而,Tornado受到最多关注的功能是其异 ...