_routing字段介绍
一个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字段介绍的更多相关文章
- Unihan(统汉字)常用字段介绍
0 背景 1 文件 1.1 IRG Sources 1.2 Dictionary Indices 1.3 Dictionary-like Data 1.4 Other Mappings 1.5 Rad ...
- ORM常用字段介绍
Django中的ORM Django项目使用MySQL数据库 1. 在Django项目的settings.py文件中,配置数据库连接信息: DATABASES = { "default&qu ...
- CDR话单主要字段介绍
l Time of call connection RRC连接时的时间,格式:yyyy年mm月dd日hh时mm分ss秒 l Call Setup Time per sections 呼叫建立时长 ...
- ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex
摘自:https://es.xiaoleilu.com/070_Index_Mgmt/31_Metadata_source.html The _source field stores the JSON ...
- django的models字段介绍
#增加数据库数据方法#方法1CalcData.objects.create(var1 ='21',var2='22')#方法2obj =CalcData(var1 ='21',var2='22')jo ...
- ecshop数据库结构和字段介绍(转载)
ecs_account_log:账户变动日志(注册用户充值.支付等记录信息)字段 类型 Null 默认 字段说明log_id mediumint(8) 否 无 日志IDuser_id mediumin ...
- Django Form 的主要内置字段介绍
修改 urls.py,添加 path('field.html', views.field), 在 templates 下创建 field.html, 内容如下: <!DOCTYPE html&g ...
- ES 13 - Elasticsearch的元字段 (_index、_type、_source、_routing等)
目录 1 标识元字段 1.1 _index - 文档所属的索引 1.2 _uid - 包含_type和_id的复合字段 1.3 _type - 文档的类型 1.4 _id - 文档的id 2 文档来源 ...
- podspec文件介绍
podspec文件是cocopods引入的第三方代码库的配置索引文件 它的创建命令是:$pod spec create TestFile podspec文件的常用配置字段介绍 Pod::Spec.ne ...
随机推荐
- GZFramework错误(升级修改)日志
sqlserver下事务中处理出现为初始化selectcommand的connection属性修改CommandDataBase中的PrepareCommand方法
- oracle同一个库上面,不同用户相互赋予权限
用法: 有两个用户:user1和user2,都是在库TEST上,分别有表user1.table1,user2.table2 但是用user1登录的时候,user2上表就不能用,此时就可以使用grant ...
- php 输出 sql语句
第一种方法 $data = M('news')->field("title,date_format(postdate,'%Y-%m-%d') as postdate,content&q ...
- centos安装xdebug 和 phpstorm+Xdebug断点调试PHP
转载地址:http://www.2cto.com/os/201304/206058.html CentOS下安装xdebug 在CentOS 6.x 的系统中,是集成xdebug 的, y ...
- 20145321 《Java程序设计》第6周学习总结
20145321 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入输出 10.1 InputStream OutputStream 1.数据有来源与目的,衔接两者的是串流 ...
- Linux下的Nginx安装
1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有g ...
- Java学习笔记-方法引用
方法引用(Method Reference) 上一篇中记录了Lambda表达式,其可以创建匿名方法.当Lambda表达式只是调用一个存在的方法时,可以采用方法引用(JDK8具有的特性).如下: pub ...
- 配置hadoop集群的lzo压缩
MR-Job中使用lzop详见MR案例:Job中使用Lzo压缩 1). 配置前的环境准备 # yum -y install lzo-devel zlib-devel gcc autoconf auto ...
- 在使用Vue.js中使用axios库时,遇到415错误(不支持的媒体类型(Unsupported media type))
知识点:vue2.0中使用axios进行(put,post请求时),遇到415错误 解决办法:在axios的第三个参数config中,设置请求头信息'Content-Type': 'applicati ...
- 转:java 重定向和转发的区别
response.sendredirect("http://www.foo.com/path/error.html"); 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使 ...