【ES实战】路由字段(_routing field)

news/2024/7/7 5:53:42 标签: java, elasticsearch

_routing field

使用以下公式将文档路由到索引中的特定分片:

shard_num = hash(_routing) % num_primary_shards

_routing 使用的默认值是文档的 [_id] 或文档的 [_parent]) ID(如果存在)。

7.14版本开始使用以下公式:

routing_factor = num_routing_shards / num_primary_shards
shard_num = (hash(_routing) % num_routing_shards) / routing_factor

num_routing_shards is the value of the index.number_of_routing_shards index setting.

num_primary_shards is the value of the index.number_of_shards index setting.

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

PUT my_index/my_type/1?routing=user1&refresh=true 
{
  "title": "This is a document"
}

GET my_index/my_type/1?routing=user1 

该文档使用 user1 作为它的路由值,而不是它的 ID。

[getting]、[deleting],或 [update]文档时需要提供相同的_routing的值。

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

GET my_index/_search
{
  "query": {
    "terms": {
      "_routing": [ "user1" ] 
    }
  }
}

查询_routing 字段(另见ids 查询)

Searching with custom routing

自定义路由可以减少搜索的影响。 不必将搜索请求散布到索引中的所有分片,而是可以将请求发送到与特定路由值(或多个值)匹配的分片:

GET my_index/_search?routing=user1,user2 
{
  "query": {
    "match": {
      "title": "document"
    }
  }
}

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

Making a routing value required

使用自定义路由时,重要的是在 [indexing], [getting], [删除] 或 [更新]文档。

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

PUT my_index2
{
  "mappings": {
    "my_type": {
      "_routing": {
        "required": true 
      }
    }
  }
}

PUT my_index2/my_type/1 
{
  "text": "No routing value provided"
}

my_type 文档需要路由。

这个索引请求会抛出一个 routing_missing_exception

Unique IDs with custom routing

在索引指定自定义 _routing 的文档时,不能保证索引中所有分片的 _id 的唯一性。 事实上,如果使用不同的_routing值索引,具有相同_id的文档可能会在不同的分片上结束。

由用户来确保 ID 在整个索引中是唯一的。

Routing to an index partition

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

这是通过在以下位置提供索引级别设置 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

从7.14开始

routing_value = hash(_routing) + hash(_id) % routing_partition_size
shard_num = (routing_value % num_routing_shards) / routing_factor

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

  • 不能在其中创建具有父子关系的映射。(5版本)
  • 无法在其中创建具有join字段关系的映射。(6.X版本)
  • 索引内的所有映射必须将 _routing 字段标记为必需。

http://www.niftyadmin.cn/n/1096958.html

相关文章

js多个定时器 id按顺序么_浅析JS的Event Loop机制

根据JS的运行环境,Event Loop(事件循环)分为浏览器的Event Loop和NodeJS的Event Loop。浏览器的Event Loop浏览器端JS异步的实现宏观上是依靠浏览器的多线程,微观上是依靠的Event Loop,即事件循环。先看一段示例代码:console.log(…

notepad ++ 插件

1.下载Notepad插件;(zen-Coding for Notepad)2.解压后将压缩包中的文件放入Notepad安装目录下的plugins文件夹中;3.重新启动就能看到菜单栏上增加了一项Zen Coding。如下图所示: 测试一下:快捷键为Ctrle 输入:div#test 按Ctrle生成&#xff1…

网速变慢深度分析:面试

上网已成为我们生活中不可缺少的工作及休闲方式,但在平时的工作中经常碰到有网友来信问“为什么网速变慢了;网速变慢怎么办”等问题。要解决这些问题,我们还是先从了解一些概念开始。 一、关于网速的一些基本概念 1、网速与带宽 网速通常指用…

【ES实战】索引的路由

索引的路由字段(_routing) 文章目录索引的路由字段(_routing)自定义路由的使用为什么使用自定义路由使用自定义路由会有什么问题怎么缓解以上的问题自定义路由的使用 详细:【ES实战】路由字段(_routing fi…

打印螺旋矩阵(python)实现

螺旋阵:任意给定n的值,an如下螺旋方式输出方阵 n 3 输出:1 8 72 9 63 4 5n 4 输出:1 12 11 102 13 16 93 14 15 84 5 6 7算法设计1:此例按照摆放数据的过程,逐圈分别处理每圈的左&#x…

车联网大数据框架_车联网行业,迎来一个深刻大变革

三剑客"煤飞色舞"强势来袭,煤炭这种蹲了几年坑的板块终于迎来了逆袭,成了今天最热的地方,恭喜,不少投资者终于能解套了。对于钢铁煤炭等这种顺周期行业,老张在昨天的文章中也提到,短期存在持续性…

B-树的理论分析

文章目录B-树背景知识B-树的定义与特点查找的分析插入的分析分裂的过程删除的分析替换的过程合并的过程动态演示JAVA实现B-树 理论部分来自《数据结构 (C语言版)》 严蔚敏 背景知识 B-树是一种平衡的多路查找树,B-树其实就是B树,…

多路径配置udev_详解Linux Multipath多路径配置--概念、配置、常用维护命令等

概述在Linux平台一部分存储产品使用操作系统自带的多路径软件,包括最常见的HP和IBM的部分存储产品,在Linux自带的多路径软件叫做multipath。那么问题就来了,到底什么是多路径?普通的电脑主机都是一个硬盘挂接到一个总线上&#xf…