Multi get (mget) API

IDによって複数のJSONドキュメントを取得します。

Python

  1. resp = client.mget(
  2. docs=[
  3. {
  4. "_index": "my-index-000001",
  5. "_id": "1"
  6. },
  7. {
  8. "_index": "my-index-000001",
  9. "_id": "2"
  10. }
  11. ],
  12. )
  13. print(resp)

Ruby

  1. response = client.mget(
  2. body: {
  3. docs: [
  4. {
  5. _index: 'my-index-000001',
  6. _id: '1'
  7. },
  8. {
  9. _index: 'my-index-000001',
  10. _id: '2'
  11. }
  12. ]
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.mget({
  2. docs: [
  3. {
  4. _index: "my-index-000001",
  5. _id: "1",
  6. },
  7. {
  8. _index: "my-index-000001",
  9. _id: "2",
  10. },
  11. ],
  12. });
  13. console.log(response);

Console

  1. GET /_mget
  2. {
  3. "docs": [
  4. {
  5. "_index": "my-index-000001",
  6. "_id": "1"
  7. },
  8. {
  9. "_index": "my-index-000001",
  10. "_id": "2"
  11. }
  12. ]
  13. }

Request

GET /_mget

GET /<index>/_mget

Prerequisites

  • Elasticsearchのセキュリティ機能が有効な場合、ターゲットインデックスまたはインデックスエイリアスに対してread インデックス権限を持っている必要があります。

Description

  1. ### Security
  2. [URLベースのアクセス制御](b10cb0563daae284.md#api-url-access-control)を参照してください。
  3. ### Partial responses
  4. 迅速な応答を確保するために、マルチゲットAPI1つ以上のシャードが失敗した場合、部分的な結果で応答します。詳細については[シャードの失敗](83d4872de54fc54b.md#shard-failures)を参照してください。
  5. ## Path parameters
  6. - `````<index>
  • (オプション、文字列) idsが指定されている場合、またはdocs配列内のドキュメントがインデックスを指定していない場合に、ドキュメントを取得するインデックスの名前。

Query parameters

  • preference
  • (オプション、文字列) 操作を実行するノードまたはシャードを指定します。デフォルトではランダムです。
  • realtime
  • (オプション、ブール値) trueの場合、リクエストはリアルタイムであり、近リアルタイムではありません。デフォルトはtrueです。リアルタイムを参照してください。
  • refresh
  • (オプション、ブール値) trueの場合、リクエストはドキュメントを取得する前に関連するシャードを更新します。デフォルトはfalseです。
  • routing
  • (オプション、文字列) 操作を特定のシャードにルーティングするために使用されるカスタム値。
  • stored_fields
  • (オプション、文字列) 応答に含めるstored fieldsのカンマ区切りリスト。
  • _source
  • (オプション、文字列) _sourceフィールドを返すかどうか、または返すフィールドのリスト。
  • _source_excludes
  • (オプション、文字列) 応答から除外する@source fieldsのカンマ区切りリスト。
    このパラメータを使用して、_source_includesクエリパラメータで指定されたサブセットからフィールドを除外することもできます。
    _sourceパラメータがfalseの場合、このパラメータは無視されます。
  • _source_includes
  • (オプション、文字列) 応答に含める@source fieldsのカンマ区切りリスト。
    このパラメータが指定されている場合、これらのソースフィールドのみが返されます。このサブセットからフィールドを除外するには、_source_excludesクエリパラメータを使用できます。
    _sourceパラメータがfalseの場合、このパラメータは無視されます。

Request body

  • docs
  • (オプション、配列) 取得したいドキュメント。リクエストURIにインデックスが指定されていない場合は必須です。各ドキュメントに対して次の属性を指定できます:
    • _id
    • (必須、文字列) 一意のドキュメントID。
    • _index
    • (オプション、文字列) ドキュメントを含むインデックス。リクエストURIにインデックスが指定されていない場合は必須です。
    • routing
    • (オプション、文字列) ドキュメントが存在するプライマリシャードのキー。インデックス時にルーティングが使用される場合は必須です。
    • _source
    • (オプション、ブール値) falseの場合、すべての_sourceフィールドを除外します。デフォルトはtrueです。
      • source_include
      • (オプション、配列) _sourceフィールドから抽出して返すフィールド。
      • source_exclude
      • (オプション、配列) 返される_sourceフィールドから除外するフィールド。
    • _stored_fields
    • (オプション、配列) 取得したい保存されたフィールド。
  • ids
  • (オプション、配列) 取得したいドキュメントのID。リクエストURIにインデックスが指定されている場合に許可されます。

Response body

応答には、リクエストで指定された順序でドキュメントを含むdocs配列が含まれます。返されるドキュメントの構造は、get APIによって返されるものに似ています。特定のドキュメントを取得する際に失敗があった場合、エラーはドキュメントの代わりに含まれます。

Examples

Get documents by ID

リクエストURIにインデックスを指定した場合、リクエストボディにはドキュメントIDのみが必要です:

Python

  1. resp = client.mget(
  2. index="my-index-000001",
  3. docs=[
  4. {
  5. "_id": "1"
  6. },
  7. {
  8. "_id": "2"
  9. }
  10. ],
  11. )
  12. print(resp)

Ruby

  1. response = client.mget(
  2. index: 'my-index-000001',
  3. body: {
  4. docs: [
  5. {
  6. _id: '1'
  7. },
  8. {
  9. _id: '2'
  10. }
  11. ]
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.mget({
  2. index: "my-index-000001",
  3. docs: [
  4. {
  5. _id: "1",
  6. },
  7. {
  8. _id: "2",
  9. },
  10. ],
  11. });
  12. console.log(response);

Console

  1. GET /my-index-000001/_mget
  2. {
  3. "docs": [
  4. {
  5. "_id": "1"
  6. },
  7. {
  8. "_id": "2"
  9. }
  10. ]
  11. }
  1. #### Python
  2. ``````python
  3. resp = client.mget(
  4. index="my-index-000001",
  5. ids=[
  6. "1",
  7. "2"
  8. ],
  9. )
  10. print(resp)
  11. `

Ruby

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

Js

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

Console

  1. GET /my-index-000001/_mget
  2. {
  3. "ids" : ["1", "2"]
  4. }

Filter source fields

デフォルトでは、すべてのドキュメントに対して_sourceフィールドが返されます(保存されている場合)。_sourceおよび_source_includeまたはsource_exclude属性を使用して、特定のドキュメントに対して返されるフィールドをフィルタリングできます。_source_source_includes、および_source_excludesクエリパラメータをリクエストURIに含めて、個別のドキュメント指示がない場合に使用するデフォルトを指定できます。

たとえば、次のリクエストは、ドキュメント1の_sourceをfalseに設定してソースを完全に除外し、ドキュメント2からfield3およびfield4を取得し、ドキュメント3からuserフィールドを取得しますが、user.locationフィールドをフィルタリングします。

Python

  1. resp = client.mget(
  2. docs=[
  3. {
  4. "_index": "test",
  5. "_id": "1",
  6. "_source": False
  7. },
  8. {
  9. "_index": "test",
  10. "_id": "2",
  11. "_source": [
  12. "field3",
  13. "field4"
  14. ]
  15. },
  16. {
  17. "_index": "test",
  18. "_id": "3",
  19. "_source": {
  20. "include": [
  21. "user"
  22. ],
  23. "exclude": [
  24. "user.location"
  25. ]
  26. }
  27. }
  28. ],
  29. )
  30. print(resp)

Ruby

  1. response = client.mget(
  2. body: {
  3. docs: [
  4. {
  5. _index: 'test',
  6. _id: '1',
  7. _source: false
  8. },
  9. {
  10. _index: 'test',
  11. _id: '2',
  12. _source: [
  13. 'field3',
  14. 'field4'
  15. ]
  16. },
  17. {
  18. _index: 'test',
  19. _id: '3',
  20. _source: {
  21. include: [
  22. 'user'
  23. ],
  24. exclude: [
  25. 'user.location'
  26. ]
  27. }
  28. }
  29. ]
  30. }
  31. )
  32. puts response

Js

  1. const response = await client.mget({
  2. docs: [
  3. {
  4. _index: "test",
  5. _id: "1",
  6. _source: false,
  7. },
  8. {
  9. _index: "test",
  10. _id: "2",
  11. _source: ["field3", "field4"],
  12. },
  13. {
  14. _index: "test",
  15. _id: "3",
  16. _source: {
  17. include: ["user"],
  18. exclude: ["user.location"],
  19. },
  20. },
  21. ],
  22. });
  23. console.log(response);

Console

  1. GET /_mget
  2. {
  3. "docs": [
  4. {
  5. "_index": "test",
  6. "_id": "1",
  7. "_source": false
  8. },
  9. {
  10. "_index": "test",
  11. "_id": "2",
  12. "_source": [ "field3", "field4" ]
  13. },
  14. {
  15. "_index": "test",
  16. "_id": "3",
  17. "_source": {
  18. "include": [ "user" ],
  19. "exclude": [ "user.location" ]
  20. }
  21. }
  22. ]
  23. }

Get stored fields

  1. たとえば、次のリクエストは、ドキュメント1から`````field1`````および`````field2`````を取得し、ドキュメント2から`````field3`````および`````field4`````を取得します:
  2. #### Python
  3. ``````python
  4. resp = client.mget(
  5. docs=[
  6. {
  7. "_index": "test",
  8. "_id": "1",
  9. "stored_fields": [
  10. "field1",
  11. "field2"
  12. ]
  13. },
  14. {
  15. "_index": "test",
  16. "_id": "2",
  17. "stored_fields": [
  18. "field3",
  19. "field4"
  20. ]
  21. }
  22. ],
  23. )
  24. print(resp)
  25. `

Ruby

  1. response = client.mget(
  2. body: {
  3. docs: [
  4. {
  5. _index: 'test',
  6. _id: '1',
  7. stored_fields: [
  8. 'field1',
  9. 'field2'
  10. ]
  11. },
  12. {
  13. _index: 'test',
  14. _id: '2',
  15. stored_fields: [
  16. 'field3',
  17. 'field4'
  18. ]
  19. }
  20. ]
  21. }
  22. )
  23. puts response

Js

  1. const response = await client.mget({
  2. docs: [
  3. {
  4. _index: "test",
  5. _id: "1",
  6. stored_fields: ["field1", "field2"],
  7. },
  8. {
  9. _index: "test",
  10. _id: "2",
  11. stored_fields: ["field3", "field4"],
  12. },
  13. ],
  14. });
  15. console.log(response);

Console

  1. GET /_mget
  2. {
  3. "docs": [
  4. {
  5. "_index": "test",
  6. "_id": "1",
  7. "stored_fields": [ "field1", "field2" ]
  8. },
  9. {
  10. "_index": "test",
  11. "_id": "2",
  12. "stored_fields": [ "field3", "field4" ]
  13. }
  14. ]
  15. }

次のリクエストは、デフォルトでfield1およびfield2をすべてのドキュメントから取得します。これらのデフォルトフィールドはドキュメント1に対して返されますが、ドキュメント2に対してfield3およびfield4を返すように上書きされます。

Python

  1. resp = client.mget(
  2. index="test",
  3. stored_fields="field1,field2",
  4. docs=[
  5. {
  6. "_id": "1"
  7. },
  8. {
  9. "_id": "2",
  10. "stored_fields": [
  11. "field3",
  12. "field4"
  13. ]
  14. }
  15. ],
  16. )
  17. print(resp)

Ruby

  1. response = client.mget(
  2. index: 'test',
  3. stored_fields: 'field1,field2',
  4. body: {
  5. docs: [
  6. {
  7. _id: '1'
  8. },
  9. {
  10. _id: '2',
  11. stored_fields: [
  12. 'field3',
  13. 'field4'
  14. ]
  15. }
  16. ]
  17. }
  18. )
  19. puts response

Js

  1. const response = await client.mget({
  2. index: "test",
  3. stored_fields: "field1,field2",
  4. docs: [
  5. {
  6. _id: "1",
  7. },
  8. {
  9. _id: "2",
  10. stored_fields: ["field3", "field4"],
  11. },
  12. ],
  13. });
  14. console.log(response);

Console

  1. GET /test/_mget?stored_fields=field1,field2
  2. {
  3. "docs": [
  4. {
  5. "_id": "1"
  6. },
  7. {
  8. "_id": "2",
  9. "stored_fields": [ "field3", "field4" ]
  10. }
  11. ]
  12. }

Specify document routing

インデックス時にルーティングが使用される場合、ドキュメントを取得するためにルーティング値を指定する必要があります。たとえば、次のリクエストは、ルーティングキーkey1に対応するシャードからtest/_doc/2を取得し、ルーティングキーkey2に対応するシャードからtest/_doc/1を取得します。

Python

  1. resp = client.mget(
  2. routing="key1",
  3. docs=[
  4. {
  5. "_index": "test",
  6. "_id": "1",
  7. "routing": "key2"
  8. },
  9. {
  10. "_index": "test",
  11. "_id": "2"
  12. }
  13. ],
  14. )
  15. print(resp)

Ruby

  1. response = client.mget(
  2. routing: 'key1',
  3. body: {
  4. docs: [
  5. {
  6. _index: 'test',
  7. _id: '1',
  8. routing: 'key2'
  9. },
  10. {
  11. _index: 'test',
  12. _id: '2'
  13. }
  14. ]
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.mget({
  2. routing: "key1",
  3. docs: [
  4. {
  5. _index: "test",
  6. _id: "1",
  7. routing: "key2",
  8. },
  9. {
  10. _index: "test",
  11. _id: "2",
  12. },
  13. ],
  14. });
  15. console.log(response);

Console

  1. GET /_mget?routing=key1
  2. {
  3. "docs": [
  4. {
  5. "_index": "test",
  6. "_id": "1",
  7. "routing": "key2"
  8. },
  9. {
  10. "_index": "test",
  11. "_id": "2"
  12. }
  13. ]
  14. }