オブジェクトフィールドタイプ
JSONドキュメントは階層的な性質を持っています:ドキュメントは内部オブジェクトを含むことができ、これらの内部オブジェクトもさらに内部オブジェクトを含むことができます。
Python
resp = client.index(
index="my-index-000001",
id="1",
document={
"region": "US",
"manager": {
"age": 30,
"name": {
"first": "John",
"last": "Smith"
}
}
},
)
print(resp)
Ruby
response = client.index(
index: 'my-index-000001',
id: 1,
body: {
region: 'US',
manager: {
age: 30,
name: {
first: 'John',
last: 'Smith'
}
}
}
)
puts response
Js
const response = await client.index({
index: "my-index-000001",
id: 1,
document: {
region: "US",
manager: {
age: 30,
name: {
first: "John",
last: "Smith",
},
},
},
});
console.log(response);
コンソール
PUT my-index-000001/_doc/1
{
"region": "US",
"manager": {
"age": 30,
"name": {
"first": "John",
"last": "Smith"
}
}
}
外部ドキュメントもJSONオブジェクトです。 | |
内部オブジェクトmanager を含んでいます。 |
|
さらに、内部オブジェクトname を含んでいます。 |
内部的には、このドキュメントは単純なフラットなキーと値のペアのリストとしてインデックスされています。
Js
{
"region": "US",
"manager.age": 30,
"manager.name.first": "John",
"manager.name.last": "Smith"
}
上記のドキュメントの明示的なマッピングは次のようになります:
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"region": {
"type": "keyword"
},
"manager": {
"properties": {
"age": {
"type": "integer"
},
"name": {
"properties": {
"first": {
"type": "text"
},
"last": {
"type": "text"
}
}
}
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
region: {
type: 'keyword'
},
manager: {
properties: {
age: {
type: 'integer'
},
name: {
properties: {
first: {
type: 'text'
},
last: {
type: 'text'
}
}
}
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
region: {
type: "keyword",
},
manager: {
properties: {
age: {
type: "integer",
},
name: {
properties: {
first: {
type: "text",
},
last: {
type: "text",
},
},
},
},
},
},
},
});
console.log(response);
コンソール
PUT my-index-000001
{
"mappings": {
"properties": {
"region": {
"type": "keyword"
},
"manager": {
"properties": {
"age": { "type": "integer" },
"name": {
"properties": {
"first": { "type": "text" },
"last": { "type": "text" }
}
}
}
}
}
}
}
トップレベルのマッピング定義内のプロパティ。 | |
manager フィールドは内部object フィールドです。 |
|
manager.name フィールドはmanager フィールド内の内部object フィールドです。 |
フィールドtype
をobject
に明示的に設定する必要はありません。これはデフォルト値です。
オブジェクトフィールドのパラメータ
次のパラメータはobject
フィールドで受け入れられます:
dynamic |
新しいproperties を既存のオブジェクトに動的に追加するかどうか。true (デフォルト)、runtime 、false およびstrict を受け入れます。 |
enabled |
オブジェクトフィールドに与えられたJSON値を解析してインデックスするか(true 、デフォルト)、完全に無視するか(false )。 |
subobjects |
オブジェクトがサブオブジェクトを保持できるか(true 、デフォルト)どうか。保持できない場合、名前にドットを含むサブフィールドはリーフとして扱われます。それ以外の場合、フィールド名は対応するオブジェクト構造に展開されます。 |
properties |
オブジェクト内のフィールドは任意のdata typeであり、object を含むことができます。新しいプロパティは既存のオブジェクトに追加できます。 |
オブジェクトの配列をインデックスする必要がある場合は、最初にNestedを読んでください。