Get API

インデックスから指定されたJSONドキュメントを取得します。

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="0",
  4. )
  5. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 0
  4. )
  5. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 0,
  4. });
  5. console.log(response);

Console

  1. 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

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="0",
  4. source=False,
  5. )
  6. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 0,
  4. _source: false
  5. )
  6. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 0,
  4. _source: "false",
  5. });
  6. console.log(response);

Console

  1. GET my-index-000001/_doc/0?_source=false
  1. #### Python
  2. ``````python
  3. resp = client.get(
  4. index="my-index-000001",
  5. id="0",
  6. source_includes="*.id",
  7. source_excludes="entities",
  8. )
  9. print(resp)
  10. `

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 0,
  4. _source_includes: '*.id',
  5. _source_excludes: 'entities'
  6. )
  7. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 0,
  4. _source_includes: "*.id",
  5. _source_excludes: "entities",
  6. });
  7. console.log(response);

Console

  1. GET my-index-000001/_doc/0?_source_includes=*.id&_source_excludes=entities

含めるフィールドのみを指定したい場合は、短い表記を使用できます:

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="0",
  4. source="*.id",
  5. )
  6. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 0,
  4. _source: '*.id'
  5. )
  6. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 0,
  4. _source: "*.id",
  5. });
  6. console.log(response);

Console

  1. GET my-index-000001/_doc/0?_source=*.id

Routing

インデックス時にルーティングが使用される場合、ドキュメントを取得するためにルーティング値も指定する必要があります。例えば:

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="2",
  4. routing="user1",
  5. )
  6. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 2,
  4. routing: 'user1'
  5. )
  6. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 2,
  4. routing: "user1",
  5. });
  6. console.log(response);

Console

  1. GET my-index-000001/_doc/2?routing=user1

このリクエストは、id 2のドキュメントを取得しますが、ユーザーに基づいてルーティングされます。正しいルーティングが指定されていない場合、ドキュメントは取得されません。

Preference

  1. `````preference`````は次のように設定できます:
  2. - `````_local
  • 可能であれば、ローカルに割り当てられたシャードで実行されることを優先します。
  • カスタム(文字列)値
  • カスタム値は、同じカスタム値に対して同じシャードが使用されることを保証します。これは、異なるリフレッシュ状態の異なるシャードにヒットする際の「ジャンプ値」を助けることができます。サンプル値は、ウェブセッションIDやユーザー名のようなものです。

Refresh

  1. ### Distributed
  2. get操作は特定のシャードIDにハッシュ化されます。その後、そのシャードID内のレプリカの1つにリダイレクトされ、結果が返されます。レプリカはプライマリシャードとそのシャードIDグループ内のレプリカです。これは、レプリカが多いほど、GETのスケーリングが向上することを意味します。
  3. ### Versioning support
  4. `````version`````パラメータを使用して、ドキュメントの現在のバージョンが指定されたものと等しい場合にのみドキュメントを取得できます。
  5. 内部的に、Elasticsearchは古いドキュメントを削除済みとしてマークし、まったく新しいドキュメントを追加しました。古いバージョンのドキュメントはすぐには消えませんが、アクセスすることはできません。Elasticsearchは、さらにデータをインデックスし続けると、バックグラウンドで削除されたドキュメントをクリーンアップします。
  6. ## Path parameters
  7. - `````<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
  • (オプション、列挙型)特定のバージョンタイプ:externalexternal_gte

Response body

  • _index
  • ドキュメントが属するインデックスの名前。
  • _id
  • ドキュメントの一意の識別子。
  • _version
  • ドキュメントのバージョン。ドキュメントが更新されるたびにインクリメントされます。
  • _seq_no
  • インデックス操作のためにドキュメントに割り当てられたシーケンス番号。シーケンス番号は、古いバージョンのドキュメントが新しいバージョンを上書きしないことを保証するために使用されます。楽観的同時実行制御を参照してください。
  • _primary_term
  • インデックス操作のためにドキュメントに割り当てられたプライマリターム。楽観的同時実行制御を参照してください。
  • found
  • ドキュメントが存在するかどうかを示します:trueまたはfalse
  • _routing
  • 明示的なルーティングが設定されている場合。
  • _source
  • foundtrueの場合、JSON形式でフォーマットされたドキュメントデータを含みます。_sourceパラメータがfalseに設定されている場合、またはstored_fieldsパラメータがtrueに設定されている場合は除外されます。
  • _fields
  • stored_fieldsパラメータがtrueに設定され、foundtrueの場合、インデックスに保存されたドキュメントフィールドを含みます。

Examples

_id 0のJSONドキュメントをmy-index-000001インデックスから取得します:

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="0",
  4. )
  5. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 0
  4. )
  5. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 0,
  4. });
  5. console.log(response);

Console

  1. GET my-index-000001/_doc/0

APIは次の結果を返します:

Console-Result

  1. {
  2. "_index": "my-index-000001",
  3. "_id": "0",
  4. "_version": 1,
  5. "_seq_no": 0,
  6. "_primary_term": 1,
  7. "found": true,
  8. "_source": {
  9. "@timestamp": "2099-11-15T14:12:12",
  10. "http": {
  11. "request": {
  12. "method": "get"
  13. },
  14. "response": {
  15. "status_code": 200,
  16. "bytes": 1070000
  17. },
  18. "version": "1.1"
  19. },
  20. "source": {
  21. "ip": "127.0.0.1"
  22. },
  23. "message": "GET /search HTTP/1.1 200 1070000",
  24. "user": {
  25. "id": "kimchy"
  26. }
  27. }
  28. }

_id 0のドキュメントが存在するかどうかを確認します:

Python

  1. resp = client.exists(
  2. index="my-index-000001",
  3. id="0",
  4. )
  5. print(resp)

Ruby

  1. response = client.exists(
  2. index: 'my-index-000001',
  3. id: 0
  4. )
  5. puts response

Js

  1. const response = await client.exists({
  2. index: "my-index-000001",
  3. id: 0,
  4. });
  5. console.log(response);

Console

  1. HEAD my-index-000001/_doc/0

Elasticsearchは、ドキュメントが存在する場合は200 - OKのステータスコードを返し、存在しない場合は404 - Not Foundを返します。

Get the source field only

  1. #### Python
  2. ``````python
  3. resp = client.get_source(
  4. index="my-index-000001",
  5. id="1",
  6. )
  7. print(resp)
  8. `

Ruby

  1. response = client.get_source(
  2. index: 'my-index-000001',
  3. id: 1
  4. )
  5. puts response

Js

  1. const response = await client.getSource({
  2. index: "my-index-000001",
  3. id: 1,
  4. });
  5. console.log(response);

Console

  1. GET my-index-000001/_source/1

ソースフィルタリングパラメータを使用して、_sourceのどの部分が返されるかを制御できます:

Python

  1. resp = client.get_source(
  2. index="my-index-000001",
  3. id="1",
  4. source_includes="*.id",
  5. source_excludes="entities",
  6. )
  7. print(resp)

Ruby

  1. response = client.get_source(
  2. index: 'my-index-000001',
  3. id: 1,
  4. _source_includes: '*.id',
  5. _source_excludes: 'entities'
  6. )
  7. puts response

Js

  1. const response = await client.getSource({
  2. index: "my-index-000001",
  3. id: 1,
  4. _source_includes: "*.id",
  5. _source_excludes: "entities",
  6. });
  7. console.log(response);

Console

  1. GET my-index-000001/_source/1/?_source_includes=*.id&_source_excludes=entities

HEADを_sourceエンドポイントと共に使用して、ドキュメントの_sourceが存在するかどうかを効率的にテストできます。ドキュメントのソースは、マッピングで無効にされている場合は利用できません。

Python

  1. resp = client.exists_source(
  2. index="my-index-000001",
  3. id="1",
  4. )
  5. print(resp)

Ruby

  1. response = client.exists_source(
  2. index: 'my-index-000001',
  3. id: 1
  4. )
  5. puts response

Js

  1. const response = await client.existsSource({
  2. index: "my-index-000001",
  3. id: 1,
  4. });
  5. console.log(response);

Console

  1. HEAD my-index-000001/_source/1

Get stored fields

  1. #### Python
  2. ``````python
  3. resp = client.indices.create(
  4. index="my-index-000001",
  5. mappings={
  6. "properties": {
  7. "counter": {
  8. "type": "integer",
  9. "store": False
  10. },
  11. "tags": {
  12. "type": "keyword",
  13. "store": True
  14. }
  15. }
  16. },
  17. )
  18. print(resp)
  19. `

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. counter: {
  7. type: 'integer',
  8. store: false
  9. },
  10. tags: {
  11. type: 'keyword',
  12. store: true
  13. }
  14. }
  15. }
  16. }
  17. )
  18. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. counter: {
  6. type: "integer",
  7. store: false,
  8. },
  9. tags: {
  10. type: "keyword",
  11. store: true,
  12. },
  13. },
  14. },
  15. });
  16. console.log(response);

Console

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "counter": {
  6. "type": "integer",
  7. "store": false
  8. },
  9. "tags": {
  10. "type": "keyword",
  11. "store": true
  12. }
  13. }
  14. }
  15. }

今、ドキュメントを追加できます:

Python

  1. resp = client.index(
  2. index="my-index-000001",
  3. id="1",
  4. document={
  5. "counter": 1,
  6. "tags": [
  7. "production"
  8. ]
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.index(
  2. index: 'my-index-000001',
  3. id: 1,
  4. body: {
  5. counter: 1,
  6. tags: [
  7. 'production'
  8. ]
  9. }
  10. )
  11. puts response

Js

  1. const response = await client.index({
  2. index: "my-index-000001",
  3. id: 1,
  4. document: {
  5. counter: 1,
  6. tags: ["production"],
  7. },
  8. });
  9. console.log(response);

Console

  1. PUT my-index-000001/_doc/1
  2. {
  3. "counter": 1,
  4. "tags": [ "production" ]
  5. }

そして、それを取得しようとします:

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="1",
  4. stored_fields="tags,counter",
  5. )
  6. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 1,
  4. stored_fields: 'tags,counter'
  5. )
  6. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 1,
  4. stored_fields: "tags,counter",
  5. });
  6. console.log(response);

Console

  1. GET my-index-000001/_doc/1?stored_fields=tags,counter

APIは次の結果を返します:

Console-Result

  1. {
  2. "_index": "my-index-000001",
  3. "_id": "1",
  4. "_version": 1,
  5. "_seq_no" : 22,
  6. "_primary_term" : 1,
  7. "found": true,
  8. "fields": {
  9. "tags": [
  10. "production"
  11. ]
  12. }
  13. }

ドキュメント自体から取得されたフィールド値は常に配列として返されます。counterフィールドは保存されていないため、getリクエストはそれを無視します。

  1. #### Python
  2. ``````python
  3. resp = client.index(
  4. index="my-index-000001",
  5. id="2",
  6. routing="user1",
  7. document={
  8. "counter": 1,
  9. "tags": [
  10. "env2"
  11. ]
  12. },
  13. )
  14. print(resp)
  15. `

Ruby

  1. response = client.index(
  2. index: 'my-index-000001',
  3. id: 2,
  4. routing: 'user1',
  5. body: {
  6. counter: 1,
  7. tags: [
  8. 'env2'
  9. ]
  10. }
  11. )
  12. puts response

Js

  1. const response = await client.index({
  2. index: "my-index-000001",
  3. id: 2,
  4. routing: "user1",
  5. document: {
  6. counter: 1,
  7. tags: ["env2"],
  8. },
  9. });
  10. console.log(response);

Console

  1. PUT my-index-000001/_doc/2?routing=user1
  2. {
  3. "counter" : 1,
  4. "tags" : ["env2"]
  5. }

Python

  1. resp = client.get(
  2. index="my-index-000001",
  3. id="2",
  4. routing="user1",
  5. stored_fields="tags,counter",
  6. )
  7. print(resp)

Ruby

  1. response = client.get(
  2. index: 'my-index-000001',
  3. id: 2,
  4. routing: 'user1',
  5. stored_fields: 'tags,counter'
  6. )
  7. puts response

Js

  1. const response = await client.get({
  2. index: "my-index-000001",
  3. id: 2,
  4. routing: "user1",
  5. stored_fields: "tags,counter",
  6. });
  7. console.log(response);

Console

  1. GET my-index-000001/_doc/2?routing=user1&stored_fields=tags,counter

APIは次の結果を返します:

Console-Result

  1. {
  2. "_index": "my-index-000001",
  3. "_id": "2",
  4. "_version": 1,
  5. "_seq_no" : 13,
  6. "_primary_term" : 1,
  7. "_routing": "user1",
  8. "found": true,
  9. "fields": {
  10. "tags": [
  11. "env2"
  12. ]
  13. }
  14. }

リーフフィールドのみがstored_fieldオプションで取得できます。オブジェクトフィールドは返されません—指定された場合、リクエストは失敗します。