Get API
インデックスから指定されたJSONドキュメントを取得します。
Python
resp = client.get(
index="my-index-000001",
id="0",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 0
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 0,
});
console.log(response);
Console
GET my-index-000001/_doc/0
Request
GET <index>/_doc/<_id>
HEAD <index>/_doc/<_id>
GET <index>/_source/<_id>
HEAD <index>/_source/<_id>
Prerequisites
- Elasticsearchのセキュリティ機能が有効になっている場合、ターゲットインデックスまたはインデックスエイリアスに対して
read
インデックス権限を持っている必要があります。
Description
GETを使用して特定のインデックスからドキュメントとそのソースまたは保存されたフィールドを取得します。HEADを使用してドキュメントが存在するかどうかを確認できます。_source
リソースを使用して、ドキュメントのソースのみを取得するか、存在するかどうかを確認できます。
Realtime
デフォルトでは、get APIはリアルタイムであり、インデックスのリフレッシュレート(データが検索可能になる時)には影響されません。保存されたフィールドが要求され(stored_fields
パラメータを参照)、ドキュメントが更新されたがまだリフレッシュされていない場合、get APIはソースを解析して保存されたフィールドを抽出する必要があります。リアルタイムGETを無効にするには、realtime
パラメータをfalse
に設定できます。
Source filtering
デフォルトでは、get操作は_source
フィールドの内容を返しますが、stored_fields
パラメータを使用した場合や_source
フィールドが無効になっている場合は除外されます。_source
の取得をオフにするには、_source
パラメータを使用します:
Python
resp = client.get(
index="my-index-000001",
id="0",
source=False,
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 0,
_source: false
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 0,
_source: "false",
});
console.log(response);
Console
GET my-index-000001/_doc/0?_source=false
#### Python
``````python
resp = client.get(
index="my-index-000001",
id="0",
source_includes="*.id",
source_excludes="entities",
)
print(resp)
`
Ruby
response = client.get(
index: 'my-index-000001',
id: 0,
_source_includes: '*.id',
_source_excludes: 'entities'
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 0,
_source_includes: "*.id",
_source_excludes: "entities",
});
console.log(response);
Console
GET my-index-000001/_doc/0?_source_includes=*.id&_source_excludes=entities
含めるフィールドのみを指定したい場合は、短い表記を使用できます:
Python
resp = client.get(
index="my-index-000001",
id="0",
source="*.id",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 0,
_source: '*.id'
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 0,
_source: "*.id",
});
console.log(response);
Console
GET my-index-000001/_doc/0?_source=*.id
Routing
インデックス時にルーティングが使用される場合、ドキュメントを取得するためにルーティング値も指定する必要があります。例えば:
Python
resp = client.get(
index="my-index-000001",
id="2",
routing="user1",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 2,
routing: 'user1'
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 2,
routing: "user1",
});
console.log(response);
Console
GET my-index-000001/_doc/2?routing=user1
このリクエストは、id 2
のドキュメントを取得しますが、ユーザーに基づいてルーティングされます。正しいルーティングが指定されていない場合、ドキュメントは取得されません。
Preference
`````preference`````は次のように設定できます:
- `````_local
- 可能であれば、ローカルに割り当てられたシャードで実行されることを優先します。
- カスタム(文字列)値
- カスタム値は、同じカスタム値に対して同じシャードが使用されることを保証します。これは、異なるリフレッシュ状態の異なるシャードにヒットする際の「ジャンプ値」を助けることができます。サンプル値は、ウェブセッションIDやユーザー名のようなものです。
Refresh
### Distributed
get操作は特定のシャードIDにハッシュ化されます。その後、そのシャードID内のレプリカの1つにリダイレクトされ、結果が返されます。レプリカはプライマリシャードとそのシャードIDグループ内のレプリカです。これは、レプリカが多いほど、GETのスケーリングが向上することを意味します。
### Versioning support
`````version`````パラメータを使用して、ドキュメントの現在のバージョンが指定されたものと等しい場合にのみドキュメントを取得できます。
内部的に、Elasticsearchは古いドキュメントを削除済みとしてマークし、まったく新しいドキュメントを追加しました。古いバージョンのドキュメントはすぐには消えませんが、アクセスすることはできません。Elasticsearchは、さらにデータをインデックスし続けると、バックグラウンドで削除されたドキュメントをクリーンアップします。
## Path parameters
- `````<index>
- (必須、文字列)ドキュメントを含むインデックスの名前。
<_id>
- (必須、文字列)ドキュメントの一意の識別子。
Query parameters
preference
- (オプション、文字列)操作を実行するノードまたはシャードを指定します。デフォルトはランダムです。
realtime
- (オプション、ブール値)
true
の場合、リクエストはリアルタイムであり、近リアルタイムではありません。デフォルトはtrue
です。リアルタイムを参照してください。 refresh
- (オプション、ブール値)
true
の場合、リクエストはドキュメントを取得する前に関連するシャードをリフレッシュします。デフォルトはfalse
です。 routing
- (オプション、文字列)操作を特定のシャードにルーティングするために使用されるカスタム値。
stored_fields
- (オプション、文字列)レスポンスに含める
stored fields
のカンマ区切りリスト。 _source
- (オプション、文字列)
_source
フィールドを返すかどうか、または返すフィールドのリスト。 _source_excludes
- (オプション、文字列)レスポンスから除外するソースフィールドのカンマ区切りリスト。
このパラメータを使用して、_source_includes
クエリパラメータで指定されたサブセットからフィールドを除外することもできます。_source
パラメータがfalse
の場合、このパラメータは無視されます。 _source_includes
- (オプション、文字列)レスポンスに含めるソースフィールドのカンマ区切りリスト。
このパラメータが指定されている場合、これらのソースフィールドのみが返されます。このサブセットからフィールドを除外するには、_source_excludes
クエリパラメータを使用します。_source
パラメータがfalse
の場合、このパラメータは無視されます。 version
- (オプション、整数)同時実行制御のための明示的なバージョン番号。指定されたバージョンは、リクエストが成功するためにドキュメントの現在のバージョンと一致する必要があります。
version_type
- (オプション、列挙型)特定のバージョンタイプ:
external
、external_gte
。
Response body
_index
- ドキュメントが属するインデックスの名前。
_id
- ドキュメントの一意の識別子。
_version
- ドキュメントのバージョン。ドキュメントが更新されるたびにインクリメントされます。
_seq_no
- インデックス操作のためにドキュメントに割り当てられたシーケンス番号。シーケンス番号は、古いバージョンのドキュメントが新しいバージョンを上書きしないことを保証するために使用されます。楽観的同時実行制御を参照してください。
_primary_term
- インデックス操作のためにドキュメントに割り当てられたプライマリターム。楽観的同時実行制御を参照してください。
found
- ドキュメントが存在するかどうかを示します:
true
またはfalse
。 _routing
- 明示的なルーティングが設定されている場合。
- _source
found
がtrue
の場合、JSON形式でフォーマットされたドキュメントデータを含みます。_source
パラメータがfalse
に設定されている場合、またはstored_fields
パラメータがtrue
に設定されている場合は除外されます。- _fields
stored_fields
パラメータがtrue
に設定され、found
がtrue
の場合、インデックスに保存されたドキュメントフィールドを含みます。
Examples
_id
0のJSONドキュメントをmy-index-000001
インデックスから取得します:
Python
resp = client.get(
index="my-index-000001",
id="0",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 0
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 0,
});
console.log(response);
Console
GET my-index-000001/_doc/0
Console-Result
{
"_index": "my-index-000001",
"_id": "0",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"@timestamp": "2099-11-15T14:12:12",
"http": {
"request": {
"method": "get"
},
"response": {
"status_code": 200,
"bytes": 1070000
},
"version": "1.1"
},
"source": {
"ip": "127.0.0.1"
},
"message": "GET /search HTTP/1.1 200 1070000",
"user": {
"id": "kimchy"
}
}
}
_id
0のドキュメントが存在するかどうかを確認します:
Python
resp = client.exists(
index="my-index-000001",
id="0",
)
print(resp)
Ruby
response = client.exists(
index: 'my-index-000001',
id: 0
)
puts response
Js
const response = await client.exists({
index: "my-index-000001",
id: 0,
});
console.log(response);
Console
HEAD my-index-000001/_doc/0
Elasticsearchは、ドキュメントが存在する場合は200 - OK
のステータスコードを返し、存在しない場合は404 - Not Found
を返します。
Get the source field only
#### Python
``````python
resp = client.get_source(
index="my-index-000001",
id="1",
)
print(resp)
`
Ruby
response = client.get_source(
index: 'my-index-000001',
id: 1
)
puts response
Js
const response = await client.getSource({
index: "my-index-000001",
id: 1,
});
console.log(response);
Console
GET my-index-000001/_source/1
ソースフィルタリングパラメータを使用して、_source
のどの部分が返されるかを制御できます:
Python
resp = client.get_source(
index="my-index-000001",
id="1",
source_includes="*.id",
source_excludes="entities",
)
print(resp)
Ruby
response = client.get_source(
index: 'my-index-000001',
id: 1,
_source_includes: '*.id',
_source_excludes: 'entities'
)
puts response
Js
const response = await client.getSource({
index: "my-index-000001",
id: 1,
_source_includes: "*.id",
_source_excludes: "entities",
});
console.log(response);
Console
GET my-index-000001/_source/1/?_source_includes=*.id&_source_excludes=entities
HEADを_source
エンドポイントと共に使用して、ドキュメントの_sourceが存在するかどうかを効率的にテストできます。ドキュメントのソースは、マッピングで無効にされている場合は利用できません。
Python
resp = client.exists_source(
index="my-index-000001",
id="1",
)
print(resp)
Ruby
response = client.exists_source(
index: 'my-index-000001',
id: 1
)
puts response
Js
const response = await client.existsSource({
index: "my-index-000001",
id: 1,
});
console.log(response);
Console
HEAD my-index-000001/_source/1
Get stored fields
#### Python
``````python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"counter": {
"type": "integer",
"store": False
},
"tags": {
"type": "keyword",
"store": True
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
counter: {
type: 'integer',
store: false
},
tags: {
type: 'keyword',
store: true
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
counter: {
type: "integer",
store: false,
},
tags: {
type: "keyword",
store: true,
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"counter": {
"type": "integer",
"store": false
},
"tags": {
"type": "keyword",
"store": true
}
}
}
}
今、ドキュメントを追加できます:
Python
resp = client.index(
index="my-index-000001",
id="1",
document={
"counter": 1,
"tags": [
"production"
]
},
)
print(resp)
Ruby
response = client.index(
index: 'my-index-000001',
id: 1,
body: {
counter: 1,
tags: [
'production'
]
}
)
puts response
Js
const response = await client.index({
index: "my-index-000001",
id: 1,
document: {
counter: 1,
tags: ["production"],
},
});
console.log(response);
Console
PUT my-index-000001/_doc/1
{
"counter": 1,
"tags": [ "production" ]
}
そして、それを取得しようとします:
Python
resp = client.get(
index="my-index-000001",
id="1",
stored_fields="tags,counter",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 1,
stored_fields: 'tags,counter'
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 1,
stored_fields: "tags,counter",
});
console.log(response);
Console
GET my-index-000001/_doc/1?stored_fields=tags,counter
Console-Result
{
"_index": "my-index-000001",
"_id": "1",
"_version": 1,
"_seq_no" : 22,
"_primary_term" : 1,
"found": true,
"fields": {
"tags": [
"production"
]
}
}
ドキュメント自体から取得されたフィールド値は常に配列として返されます。counter
フィールドは保存されていないため、getリクエストはそれを無視します。
#### Python
``````python
resp = client.index(
index="my-index-000001",
id="2",
routing="user1",
document={
"counter": 1,
"tags": [
"env2"
]
},
)
print(resp)
`
Ruby
response = client.index(
index: 'my-index-000001',
id: 2,
routing: 'user1',
body: {
counter: 1,
tags: [
'env2'
]
}
)
puts response
Js
const response = await client.index({
index: "my-index-000001",
id: 2,
routing: "user1",
document: {
counter: 1,
tags: ["env2"],
},
});
console.log(response);
Console
PUT my-index-000001/_doc/2?routing=user1
{
"counter" : 1,
"tags" : ["env2"]
}
Python
resp = client.get(
index="my-index-000001",
id="2",
routing="user1",
stored_fields="tags,counter",
)
print(resp)
Ruby
response = client.get(
index: 'my-index-000001',
id: 2,
routing: 'user1',
stored_fields: 'tags,counter'
)
puts response
Js
const response = await client.get({
index: "my-index-000001",
id: 2,
routing: "user1",
stored_fields: "tags,counter",
});
console.log(response);
Console
GET my-index-000001/_doc/2?routing=user1&stored_fields=tags,counter
Console-Result
{
"_index": "my-index-000001",
"_id": "2",
"_version": 1,
"_seq_no" : 13,
"_primary_term" : 1,
"_routing": "user1",
"found": true,
"fields": {
"tags": [
"env2"
]
}
}
リーフフィールドのみがstored_field
オプションで取得できます。オブジェクトフィールドは返されません—指定された場合、リクエストは失敗します。