Link Search Menu Expand Document Documentation Menu

路由

OpenSearch 使用哈希算法将文档路由到索引中的特定分片。默认情况下,文档的 _id 字段用作路由值,但您也可以为每个文档指定自定义路由值。

默认路由

以下是默认的 OpenSearch 路由公式。_routing 值是文档的 _id

shard_num = hash(_routing) % num_primary_shards

自定义路由

在索引文档时,您可以指定自定义路由值,如下面的示例请求所示

PUT sample-index1/_doc/1?routing=JohnDoe1
{
  "title": "This is a document"
}

在此示例中,文档使用值 JohnDoe1 进行路由,而不是默认的 _id

当检索、删除或更新文档时,您必须提供相同的路由值,如下面的示例请求所示

GET sample-index1/_doc/1?routing=JohnDoe1

按路由查询

您可以使用 _routing 字段根据文档的路由值进行查询,如下面的示例所示。此查询仅搜索与 JohnDoe1 路由值关联的分片。

GET sample-index1/_search
{
  "query": {
    "terms": {
      "_routing": [ "JohnDoe1" ]
    }
  }
}

必需的路由

您可以将自定义路由设为索引上所有 CRUD 操作的必需项,如下面的示例请求所示。如果您尝试索引文档而未提供路由值,OpenSearch 将抛出异常。

PUT sample-index2
{
  "mappings": {
    "_routing": {
      "required": true
    }
  }
}

路由到特定分片

您可以将索引配置为将自定义值路由到分片子集而不是单个分片。这是通过在创建索引时设置 index.routing_partition_size 来完成的。计算分片的公式为 shard_num = (hash(_routing) + hash(_id)) % routing_partition_size) % num_primary_shards

以下示例请求将文档路由到索引中的四个分片之一

PUT sample-index3
{
  "settings": {
    "index.routing_partition_size": 4
  },
  "mappings": {
    "_routing": {
      "required": true
    }
  }
}

剩余 350 字符

有问题?

想做贡献?