フィールドマッピングAPIの取得

mapping definitionsを1つ以上のフィールドのために取得します。データストリームの場合、APIはストリームのバックインデックスのフィールドマッピングを取得します。

このAPIは、complete mappingが必要ない場合や、インデックスマッピングに多数のフィールドが含まれている場合に便利です。

Python

  1. resp = client.indices.get_field_mapping(
  2. index="my-index-000001",
  3. fields="user",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: 'my-index-000001',
  3. fields: 'user'
  4. )
  5. puts response

Js

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

コンソール

  1. GET /my-index-000001/_mapping/field/user

リクエスト

GET /_mapping/field/<field>

GET /<target>/_mapping/field/<field>

前提条件

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

パスパラメータ

  • <target>
  • (オプション、文字列) リクエストを制限するために使用されるデータストリーム、インデックス、およびエイリアスのカンマ区切りリスト。ワイルドカード(*)をサポートします。すべてのデータストリームとインデックスをターゲットにするには、このパラメータを省略するか、*または_allを使用します。
  • <field>
  • (オプション、文字列) 返される情報を制限するために使用されるフィールドのカンマ区切りリストまたはワイルドカード式。

クエリパラメータ

  • allow_no_indices
  • (オプション、ブール値) falseの場合、リクエストは、ワイルドカード式、index alias、または_allの値が欠落または閉じたインデックスのみをターゲットにする場合にエラーを返します。この動作は、リクエストが他のオープンインデックスをターゲットにしている場合でも適用されます。たとえば、foo*,bar*をターゲットにするリクエストは、インデックスがfooで始まるがbarで始まるインデックスがない場合にエラーを返します。
    デフォルトはtrueです。
  • expand_wildcards
  • (オプション、文字列) ワイルドカードパターンが一致できるインデックスのタイプ。リクエストがデータストリームをターゲットにできる場合、この引数はワイルドカード式が隠れたデータストリームに一致するかどうかを決定します。カンマ区切りの値をサポートします。たとえばopen,hidden。有効な値は次のとおりです:
    • all
    • すべてのデータストリームまたはインデックスに一致します。隠れたもの(hidden)も含まれます。
    • open
    • オープンで非隠れたインデックスに一致します。また、非隠れたデータストリームにも一致します。
    • closed
    • 閉じた非隠れたインデックスに一致します。また、非隠れたデータストリームにも一致します。データストリームは閉じることができません。
    • hidden
    • 隠れたデータストリームと隠れたインデックスに一致します。openclosed、またはその両方と組み合わせる必要があります。
    • none
    • ワイルドカードパターンは受け入れられません。
  • ignore_unavailable
  • (オプション、ブール値) falseの場合、リクエストは欠落または閉じたインデックスをターゲットにする場合にエラーを返します。デフォルトはfalseです。
  • include_defaults
  • (オプション、ブール値) trueの場合、レスポンスにはデフォルトのマッピング値が含まれます。デフォルトはfalseです。

インデックス設定の例

新しいインデックスを作成する際にフィールドマッピングを提供できます。次のcreate index APIリクエストは、いくつかのフィールドマッピングを持つpublicationsインデックスを作成します。

Python

  1. resp = client.indices.create(
  2. index="publications",
  3. mappings={
  4. "properties": {
  5. "id": {
  6. "type": "text"
  7. },
  8. "title": {
  9. "type": "text"
  10. },
  11. "abstract": {
  12. "type": "text"
  13. },
  14. "author": {
  15. "properties": {
  16. "id": {
  17. "type": "text"
  18. },
  19. "name": {
  20. "type": "text"
  21. }
  22. }
  23. }
  24. }
  25. },
  26. )
  27. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'publications',
  3. body: {
  4. mappings: {
  5. properties: {
  6. id: {
  7. type: 'text'
  8. },
  9. title: {
  10. type: 'text'
  11. },
  12. abstract: {
  13. type: 'text'
  14. },
  15. author: {
  16. properties: {
  17. id: {
  18. type: 'text'
  19. },
  20. name: {
  21. type: 'text'
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. )
  29. puts response

Js

  1. const response = await client.indices.create({
  2. index: "publications",
  3. mappings: {
  4. properties: {
  5. id: {
  6. type: "text",
  7. },
  8. title: {
  9. type: "text",
  10. },
  11. abstract: {
  12. type: "text",
  13. },
  14. author: {
  15. properties: {
  16. id: {
  17. type: "text",
  18. },
  19. name: {
  20. type: "text",
  21. },
  22. },
  23. },
  24. },
  25. },
  26. });
  27. console.log(response);

コンソール

  1. PUT /publications
  2. {
  3. "mappings": {
  4. "properties": {
  5. "id": { "type": "text" },
  6. "title": { "type": "text" },
  7. "abstract": { "type": "text" },
  8. "author": {
  9. "properties": {
  10. "id": { "type": "text" },
  11. "name": { "type": "text" }
  12. }
  13. }
  14. }
  15. }
  16. }

次のコマンドはフィールドtitleのマッピングのみを返します:

Python

  1. resp = client.indices.get_field_mapping(
  2. index="publications",
  3. fields="title",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: 'publications',
  3. fields: 'title'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "publications",
  3. fields: "title",
  4. });
  5. console.log(response);

コンソール

  1. GET publications/_mapping/field/title

APIは次のレスポンスを返します:

コンソール-結果

  1. {
  2. "publications": {
  3. "mappings": {
  4. "title": {
  5. "full_name": "title",
  6. "mapping": {
  7. "title": {
  8. "type": "text"
  9. }
  10. }
  11. }
  12. }
  13. }
  14. }

フィールドの指定

get mapping APIを使用すると、カンマ区切りのフィールドリストを指定できます。

たとえば、authorフィールドのidを選択するには、その完全な名前author.idを使用する必要があります。

Python

  1. resp = client.indices.get_field_mapping(
  2. index="publications",
  3. fields="author.id,abstract,name",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: 'publications',
  3. fields: 'author.id,abstract,name'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "publications",
  3. fields: "author.id,abstract,name",
  4. });
  5. console.log(response);

コンソール

  1. GET publications/_mapping/field/author.id,abstract,name

返される:

コンソール-結果

  1. {
  2. "publications": {
  3. "mappings": {
  4. "author.id": {
  5. "full_name": "author.id",
  6. "mapping": {
  7. "id": {
  8. "type": "text"
  9. }
  10. }
  11. },
  12. "abstract": {
  13. "full_name": "abstract",
  14. "mapping": {
  15. "abstract": {
  16. "type": "text"
  17. }
  18. }
  19. }
  20. }
  21. }
  22. }

get field mapping APIはワイルドカード表記もサポートしています。

Python

  1. resp = client.indices.get_field_mapping(
  2. index="publications",
  3. fields="a*",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: 'publications',
  3. fields: 'a*'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "publications",
  3. fields: "a*",
  4. });
  5. console.log(response);

コンソール

  1. GET publications/_mapping/field/a*

返される:

コンソール-結果

  1. {
  2. "publications": {
  3. "mappings": {
  4. "author.name": {
  5. "full_name": "author.name",
  6. "mapping": {
  7. "name": {
  8. "type": "text"
  9. }
  10. }
  11. },
  12. "abstract": {
  13. "full_name": "abstract",
  14. "mapping": {
  15. "abstract": {
  16. "type": "text"
  17. }
  18. }
  19. },
  20. "author.id": {
  21. "full_name": "author.id",
  22. "mapping": {
  23. "id": {
  24. "type": "text"
  25. }
  26. }
  27. }
  28. }
  29. }
  30. }

複数のターゲットとフィールド

get field mapping APIは、単一のリクエストで複数のデータストリームまたはインデックスから複数のフィールドのマッピングを取得するために使用できます。

  1. `````<target>`````パラメータを省略するか、`````*`````または`````_all`````の値を使用して、クラスター内のすべてのデータストリームとインデックスをターゲットにできます。
  2. 同様に、`````<field>`````パラメータを省略するか、`````*`````の値を使用して、ターゲットデータストリームまたはインデックス内のすべてのフィールドのマッピングを取得できます。ただし、`````<field>`````パラメータは`````_all`````の値をサポートしていません。
  3. たとえば、次のリクエストは、`````my-index-000001`````または`````my-index-000002`````という名前の任意のデータストリームまたはインデックス内の`````message`````フィールドのマッピングを取得します。
  4. #### Python
  5. ``````python
  6. resp = client.indices.get_field_mapping(
  7. index="my-index-000001,my-index-000002",
  8. fields="message",
  9. )
  10. print(resp)
  11. `

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: 'my-index-000001,my-index-000002',
  3. fields: 'message'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "my-index-000001,my-index-000002",
  3. fields: "message",
  4. });
  5. console.log(response);

コンソール

  1. GET /my-index-000001,my-index-000002/_mapping/field/message

次のリクエストは、クラスター内の任意のデータストリームまたはインデックス内のmessageおよびuser.idフィールドのマッピングを取得します。

Python

  1. resp = client.indices.get_field_mapping(
  2. index="_all",
  3. fields="message",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: '_all',
  3. fields: 'message'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "_all",
  3. fields: "message",
  4. });
  5. console.log(response);

コンソール

  1. GET /_all/_mapping/field/message

次のリクエストは、クラスター内の任意のデータストリームまたはインデックス内のidプロパティを持つフィールドのマッピングを取得します。

Python

  1. resp = client.indices.get_field_mapping(
  2. index="_all",
  3. fields="*.id",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_field_mapping(
  2. index: '_all',
  3. fields: '*.id'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getFieldMapping({
  2. index: "_all",
  3. fields: "*.id",
  4. });
  5. console.log(response);

コンソール

  1. GET /_all/_mapping/field/*.id