クラスタAPIの解決
指定されたインデックス式を解決して、ローカルクラスタを含む各クラスタに関する情報を返します。
このエンドポイントは、クロスクラスタ検索を行う前に、検索に含めるべきリモートクラスタを特定するのに役立ちます。
このエンドポイントでは、クロスクラスタ検索と同じインデックス式を使用します。インデックスおよびクラスタ除外もこのエンドポイントでサポートされています。
インデックス式内の各クラスタについて、次の情報が返されます:
- 1. クエリを実行している(”ローカル”)クラスタが、インデックス式のスコープ内の各リモートクラスタに現在接続されているかどうか
- 2. 各リモートクラスタが
skip_unavailable
をtrue
またはfalse
として構成されているかどうか - 3. そのクラスタにインデックス式に一致するインデックス、エイリアス、またはデータストリームが存在するかどうか
- 4. クロスクラスタ検索を行った際にエラーが返される可能性があるかどうか(ユーザーがインデックスをクエリする権限を持っていない場合の認証エラーを含む)
- 5. Elasticsearchサーバーのバージョン情報
Python
resp = client.indices.resolve_cluster(
name="my-index-*,cluster*:my-index-*",
)
print(resp)
Ruby
response = client.indices.resolve_cluster(
name: 'my-index-*,cluster*:my-index-*'
)
puts response
Js
const response = await client.indices.resolveCluster({
name: "my-index-*,cluster*:my-index-*",
});
console.log(response);
コンソール
GET /_resolve/cluster/my-index-*,cluster*:my-index-*
このコマンドは、ローカルクラスタとエイリアスcluster*
で始まるすべてのリモート構成クラスタに関する情報を返します。各クラスタは、my-index-*
に一致するインデックス、エイリアス、またはデータストリームがあるかどうかの情報を返します。
リクエスト
GET /_resolve/cluster/<index_expression>
前提条件
- Elasticsearchのセキュリティ機能が有効になっている場合、ターゲットデータストリーム、インデックス、またはエイリアスに対して
view_index_metadata
、read
、またはmanage
インデックス特権を持っている必要があります。
パスパラメータ
<index_expression>
- (必須、文字列) 解決するインデックス、エイリアス、およびデータストリームの名前またはインデックスパターンをカンマ区切りで指定します。マルチターゲット構文を使用します。リモートクラスタに関するリソースは、
<cluster>:<name>
構文を使用して指定できます。
クエリパラメータ
expand_wildcards
- (オプション、文字列) ワイルドカードパターンが一致できるインデックスのタイプ。リクエストがデータストリームをターゲットにできる場合、この引数はワイルドカード式が隠しデータストリームに一致するかどうかを決定します。カンマ区切りの値をサポートします。
open,hidden
のような有効な値は:all
- すべてのデータストリームまたはインデックスに一致します。隠しインデックスを含みます。隠しものも含まれます。
open
- 開いている非隠しインデックスに一致します。非隠しデータストリームにも一致します。
closed
- 閉じた非隠しインデックスに一致します。非隠しデータストリームにも一致します。データストリームは閉じることができません。
hidden
- 隠しデータストリームおよび隠しインデックスに一致します。
open
、closed
、またはその両方と組み合わせる必要があります。 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. リモートクラスタが、検索で使用したい機能をサポートしていない古いバージョンである。
例
Python
resp = client.indices.resolve_cluster(
name="my-index*,clust*:my-index*",
)
print(resp)
Ruby
response = client.indices.resolve_cluster(
name: 'my-index*,clust*:my-index*'
)
puts response
Js
const response = await client.indices.resolveCluster({
name: "my-index*,clust*:my-index*",
});
console.log(response);
コンソール
GET /_resolve/cluster/my-index*,clust*:my-index*
コンソール-結果
{
"(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"
}
}
}
各クラスタには独自のレスポンスセクションがあります。リクエストを送信したクラスタは”(local)”としてラベル付けされています。 | |
クエリを実行しているクラスタは、各リモートクラスタにリクエストを送信しようとします。成功した場合、connected =true 。 |
|
各リモートクラスタのskip_unavailable 設定は、ローカルクラスタで構成されています。 |
|
そのクラスタに指定されたインデックス式に一致するインデックス、エイリアス、またはデータストリームがあるかどうかを示します。 | |
Elasticsearchサーバーのバージョン。 |
クロスクラスタ検索の潜在的な問題を特定する
次のリクエストは、クエリを変更することで検索の失敗を防ぐ方法のいくつかの例を示しています。
Python
resp = client.indices.resolve_cluster(
name="not-present,clust*:my-index*,oldcluster:*",
ignore_unavailable=False,
)
print(resp)
Ruby
response = client.indices.resolve_cluster(
name: 'not-present,clust*:my-index*,oldcluster:*',
ignore_unavailable: false
)
puts response
Js
const response = await client.indices.resolveCluster({
name: "not-present,clust*:my-index*,oldcluster:*",
ignore_unavailable: "false",
});
console.log(response);
コンソール
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 パラメータを使用して”no suchindex”エラーが返されます。他のタイプのエラーもここに表示される可能性があります。たとえば、指定されたインデックスを検索する権限がない場合のセキュリティ 権限エラーなどです。 |
|
cluster_one リモートクラスタには、パターンmy-index* に一致するインデックスがありません。パターンに一致するインデックスがないか、インデックスが閉じている可能性があります。(これを確認するには、インデックスを解決する APIを使用できます。) |
|
cluster_two リモートクラスタは接続されていません(接続の試行が失敗しました)。このクラスタはskip_unavailable=false としてマークされているため、検索からこのクラスタを除外するために-cluster_two:* を検索インデックス式に追加することをお勧めします。 |
|
oldcluster リモートクラスタは、一致するインデックスがあることを示していますが、バージョン情報は含まれていません。これは、クラスタのバージョンが8.13.0で_resolve/cluster APIの導入以前のものであることを示しています。したがって、クロスクラスタ検索から除外することをお勧めします。(注:エンドポイントは、一致するインデックスがあることを確認するためにインデックスを解決する APIを使用しました。) |