解析集群 API编辑

解析指定的索引表达式,以返回有关每个集群的信息,如果包含本地集群,则也包括在内。

此端点在执行 跨集群搜索 之前非常有用,因为它可以确定哪些远程集群应包含在搜索中。

您可以在此端点中使用与跨集群搜索相同的索引表达式。此端点也支持索引和 集群排除

对于索引表达式中的每个集群,将返回以下信息:

  1. 查询(“本地”)集群当前是否连接到索引表达式范围内的每个远程集群
  2. 每个远程集群是否将 skip_unavailable 配置为 truefalse
  3. 该集群上是否有任何与索引表达式匹配的索引、别名或数据流
  4. 当您执行跨集群搜索时,搜索是否可能会返回错误(包括如果您的用户没有查询索引的权限时出现的任何授权错误)
  5. 集群版本信息,包括 Elasticsearch 服务器版本
GET /_resolve/cluster/my-index-*,cluster*:my-index-*

这将返回有关本地集群和所有以别名 cluster* 开头的远程配置集群的信息。每个集群都将返回有关其是否有任何与 my-index-* 匹配的索引、别名或数据流的信息。

请求编辑

GET /_resolve/cluster/<index_expression>

先决条件编辑

  • 如果启用了 Elasticsearch 安全功能,则您必须具有目标数据流、索引或别名的 view_index_metadatareadmanage 索引权限

路径参数编辑

<index_expression>

(必填,字符串)要解析的索引、别名和数据流的以逗号分隔的名称或索引模式,使用 多目标语法。可以使用 <cluster>:<name> 语法指定 远程集群 上的资源。

查询参数编辑

expand_wildcards

(可选,字符串)通配符模式可以匹配的索引类型。如果请求可以定位数据流,则此参数确定通配符表达式是否匹配隐藏数据流。支持逗号分隔的值,例如 open,hidden。有效值为:

all
匹配任何数据流或索引,包括 隐藏的 数据流或索引。
open
匹配打开的、非隐藏的索引。也匹配任何非隐藏的数据流。
closed
匹配关闭的、非隐藏的索引。也匹配任何非隐藏的数据流。数据流不能关闭。
hidden
匹配隐藏的数据流和隐藏的索引。必须与 openclosed 或两者结合使用。
none
不接受通配符模式。

默认为 open

ignore_unavailable

(可选,布尔值)如果为 false,则如果请求的目标是缺少的或已关闭的索引,则该请求将返回错误。默认为 false

默认为 false

allow_no_indices

(可选,布尔值)如果为 false,则如果任何通配符表达式、索引别名_all 值仅定位到缺少的或已关闭的索引,则请求将返回错误。即使请求定位到其他打开的索引,此行为也适用。例如,如果索引以 foo 开头但没有索引以 bar 开头,则定位到 foo*,bar* 的请求将返回错误。

默认为 true

ignore_throttled

(可选,布尔值)如果为 true,则在冻结时将忽略具体的、已扩展的或已设置别名的索引。默认为 false

[7.16.0] 已在 7.16.0 中弃用。

在跨集群搜索之前使用此端点的优势编辑

在以下情况下,您可能希望从搜索中排除集群或索引:

  1. 远程集群当前未连接,并且配置为 skip_unavailable=false。在这种情况下执行跨集群搜索将导致 整个搜索失败
  2. 集群没有与索引表达式匹配的索引、别名或数据流(或者您的用户没有搜索它们的权限)。例如,假设您的索引表达式是 logs*,remote1:logs*,并且 remote1 集群没有与 logs* 匹配的索引、别名或数据流。在这种情况下,如果您将该集群包含在跨集群搜索中,则该集群将不会返回任何结果。
  3. 当您执行搜索时,索引表达式(与您指定的任何查询参数组合)可能会导致抛出异常。在这些情况下,_resolve/cluster 响应中的“error”字段将出现。(这也是显示安全/权限错误的地方。)
  4. 远程集群是较旧的版本,不支持您要在搜索中使用的功能。

示例编辑

GET /_resolve/cluster/my-index*,clust*:my-index*

API 返回以下响应:

{
  "(local)": {          
    "connected": true,
    "skip_unavailable": false,
    "matching_indices": true,
    "version": {
      "number": "8.13.0",
      "build_flavor": "default",
      "minimum_wire_compatibility_version": "7.17.0",
      "minimum_index_compatibility_version": "7.0.0"
    }
  },
  "cluster_one": {
    "connected": true,         
    "skip_unavailable": true,  
    "matching_indices": true,  
    "version": {
      "number": "8.13.0",      
      "build_flavor": "default",
      "minimum_wire_compatibility_version": "7.17.0",
      "minimum_index_compatibility_version": "7.0.0"
    }
  },
  "cluster_two": {
    "connected": true,
    "skip_unavailable": false,
    "matching_indices": true,
    "version": {
      "number": "8.13.0",
      "build_flavor": "default",
      "minimum_wire_compatibility_version": "7.17.0",
      "minimum_index_compatibility_version": "7.0.0"
    }
  }
}

每个集群都有自己的响应部分。您向其发送请求的集群标记为“(本地)”。

查询集群尝试向每个远程集群发出请求。如果成功,则 connected=true

每个远程集群的 skip_unavailable 设置,在本地集群上配置。

指示是否有任何索引、别名或数据流与为该集群指定的索引表达式匹配。

Elasticsearch 服务器版本。

识别跨集群搜索中的潜在问题编辑

以下请求显示了修改查询以防止搜索失败的几个示例。

GET /_resolve/cluster/not-present,clust*:my-index*,oldcluster:*?ignore_unavailable=false
{
  "(local)": {
    "connected": true,
    "skip_unavailable": false,
    "error": "no such index [not_present]"  
  },
  "cluster_one": {
    "connected": true,
    "skip_unavailable": true,
    "matching_indices": false,    
    "version": {
      "number": "8.13.0",
      "build_flavor": "default",
      "minimum_wire_compatibility_version": "7.17.0",
      "minimum_index_compatibility_version": "7.0.0"
    }
  },
  "cluster_two": {
    "connected": false,           
    "skip_unavailable": false,
    "matching_indices": true,
    "version": {
      "number": "8.13.0",
      "build_flavor": "default",
      "minimum_wire_compatibility_version": "7.17.0",
      "minimum_index_compatibility_version": "7.0.0"
    }
  },
  "oldcluster": {         
    "connected": true,
    "skip_unavailable": false,
    "matching_indices": true
  }
}

本地集群没有名为 not_present 的索引。使用指定的 ignore_unavailable=false 参数对其进行搜索将返回“无此索引”错误。其他类型的错误也可能出现在此处,例如当用户没有授权搜索指定索引时的安全权限错误。

cluster_one 远程集群没有与模式 my-index* 匹配的索引。可能没有与该模式匹配的索引,或者该索引可能已关闭。(您可以使用 解析索引 API 检查这一点。)

cluster_two 远程集群未连接(连接尝试失败)。由于此集群标记为 skip_unavailable=false,因此您可能应该通过在搜索索引表达式中添加 -cluster_two:* 来将其从搜索中排除。

oldcluster 远程集群显示它具有匹配的索引,但未包含版本信息。这表明该集群版本早于 8.13.0 中引入的 _resolve/cluster API,因此您可能希望将其从跨集群搜索中排除。(注意:该端点能够判断是否有匹配的索引,因为它回退使用了 解析索引 API。)