オブジェクトフィールドタイプ

JSONドキュメントは階層的な性質を持っています:ドキュメントは内部オブジェクトを含むことができ、これらの内部オブジェクトもさらに内部オブジェクトを含むことができます。

Python

  1. resp = client.index(
  2. index="my-index-000001",
  3. id="1",
  4. document={
  5. "region": "US",
  6. "manager": {
  7. "age": 30,
  8. "name": {
  9. "first": "John",
  10. "last": "Smith"
  11. }
  12. }
  13. },
  14. )
  15. print(resp)

Ruby

  1. response = client.index(
  2. index: 'my-index-000001',
  3. id: 1,
  4. body: {
  5. region: 'US',
  6. manager: {
  7. age: 30,
  8. name: {
  9. first: 'John',
  10. last: 'Smith'
  11. }
  12. }
  13. }
  14. )
  15. puts response

Js

  1. const response = await client.index({
  2. index: "my-index-000001",
  3. id: 1,
  4. document: {
  5. region: "US",
  6. manager: {
  7. age: 30,
  8. name: {
  9. first: "John",
  10. last: "Smith",
  11. },
  12. },
  13. },
  14. });
  15. console.log(response);

コンソール

  1. PUT my-index-000001/_doc/1
  2. {
  3. "region": "US",
  4. "manager": {
  5. "age": 30,
  6. "name": {
  7. "first": "John",
  8. "last": "Smith"
  9. }
  10. }
  11. }
外部ドキュメントもJSONオブジェクトです。
内部オブジェクトmanagerを含んでいます。
さらに、内部オブジェクトnameを含んでいます。

内部的には、このドキュメントは単純なフラットなキーと値のペアのリストとしてインデックスされています。

Js

  1. {
  2. "region": "US",
  3. "manager.age": 30,
  4. "manager.name.first": "John",
  5. "manager.name.last": "Smith"
  6. }

上記のドキュメントの明示的なマッピングは次のようになります:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "region": {
  6. "type": "keyword"
  7. },
  8. "manager": {
  9. "properties": {
  10. "age": {
  11. "type": "integer"
  12. },
  13. "name": {
  14. "properties": {
  15. "first": {
  16. "type": "text"
  17. },
  18. "last": {
  19. "type": "text"
  20. }
  21. }
  22. }
  23. }
  24. }
  25. }
  26. },
  27. )
  28. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. region: {
  7. type: 'keyword'
  8. },
  9. manager: {
  10. properties: {
  11. age: {
  12. type: 'integer'
  13. },
  14. name: {
  15. properties: {
  16. first: {
  17. type: 'text'
  18. },
  19. last: {
  20. type: 'text'
  21. }
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }
  29. )
  30. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. region: {
  6. type: "keyword",
  7. },
  8. manager: {
  9. properties: {
  10. age: {
  11. type: "integer",
  12. },
  13. name: {
  14. properties: {
  15. first: {
  16. type: "text",
  17. },
  18. last: {
  19. type: "text",
  20. },
  21. },
  22. },
  23. },
  24. },
  25. },
  26. },
  27. });
  28. console.log(response);

コンソール

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "region": {
  6. "type": "keyword"
  7. },
  8. "manager": {
  9. "properties": {
  10. "age": { "type": "integer" },
  11. "name": {
  12. "properties": {
  13. "first": { "type": "text" },
  14. "last": { "type": "text" }
  15. }
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }
トップレベルのマッピング定義内のプロパティ。
managerフィールドは内部objectフィールドです。
manager.nameフィールドはmanagerフィールド内の内部objectフィールドです。

フィールドtypeobjectに明示的に設定する必要はありません。これはデフォルト値です。

オブジェクトフィールドのパラメータ

次のパラメータはobjectフィールドで受け入れられます:

dynamic 新しいpropertiesを既存のオブジェクトに動的に追加するかどうか。true(デフォルト)、runtimefalseおよびstrictを受け入れます。
enabled オブジェクトフィールドに与えられたJSON値を解析してインデックスするか(true、デフォルト)、完全に無視するか(false)。
subobjects オブジェクトがサブオブジェクトを保持できるか(true、デフォルト)どうか。保持できない場合、名前にドットを含むサブフィールドはリーフとして扱われます。それ以外の場合、フィールド名は対応するオブジェクト構造に展開されます。
properties オブジェクト内のフィールドは任意のdata typeであり、objectを含むことができます。新しいプロパティは既存のオブジェクトに追加できます。

オブジェクトの配列をインデックスする必要がある場合は、最初にNestedを読んでください。