明示的マッピング
あなたはElasticsearchが推測できる以上にデータについて知っていますので、動的マッピングは開始するのに役立ちますが、ある時点で自分自身の明示的なマッピングを指定したくなるでしょう。
インデックスを作成するときや、既存のインデックスにフィールドを追加するときにフィールドマッピングを作成できます。
明示的なマッピングでインデックスを作成する
新しいインデックスを明示的なマッピングで作成するには、インデックスを作成するAPIを使用できます。
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"age": {
"type": "integer"
},
"email": {
"type": "keyword"
},
"name": {
"type": "text"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
age: {
type: 'integer'
},
email: {
type: 'keyword'
},
name: {
type: 'text'
}
}
}
}
)
puts response
Go
res, err := es.Indices.Create(
"my-index-000001",
es.Indices.Create.WithBody(strings.NewReader(`{
"mappings": {
"properties": {
"age": {
"type": "integer"
},
"email": {
"type": "keyword"
},
"name": {
"type": "text"
}
}
}
}`)),
)
fmt.Println(res, err)
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
age: {
type: "integer",
},
email: {
type: "keyword",
},
name: {
type: "text",
},
},
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" }
}
}
}
age を作成し、integer フィールドを作成します |
|
email を作成し、keyword フィールドを作成します |
|
name を作成し、text フィールドを作成します |
既存のマッピングにフィールドを追加する
既存のインデックスに1つ以上の新しいフィールドを追加するには、マッピングを更新するAPIを使用できます。
次の例では、employee-id
、keyword
フィールドをindex
のマッピングパラメータ値false
で追加します。これは、employee-id
フィールドの値が保存されるが、インデックスされず、検索可能ではないことを意味します。
Python
resp = client.indices.put_mapping(
index="my-index-000001",
properties={
"employee-id": {
"type": "keyword",
"index": False
}
},
)
print(resp)
Ruby
response = client.indices.put_mapping(
index: 'my-index-000001',
body: {
properties: {
"employee-id": {
type: 'keyword',
index: false
}
}
}
)
puts response
Go
res, err := es.Indices.PutMapping(
[]string{"my-index-000001"},
strings.NewReader(`{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}`),
)
fmt.Println(res, err)
Js
const response = await client.indices.putMapping({
index: "my-index-000001",
properties: {
"employee-id": {
type: "keyword",
index: false,
},
},
});
console.log(response);
コンソール
PUT /my-index-000001/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
フィールドのマッピングを更新する
サポートされているマッピングパラメータを除いて、既存のフィールドのマッピングやフィールドタイプを変更することはできません。既存のフィールドを変更すると、すでにインデックスされたデータが無効になる可能性があります。
データストリームのバックインデックスのフィールドのマッピングを変更する必要がある場合は、データストリームのマッピングと設定を変更するを参照してください。
他のインデックスのフィールドのマッピングを変更する必要がある場合は、正しいマッピングで新しいインデックスを作成し、再インデックスしてそのインデックスにデータを移動します。
フィールドの名前を変更すると、古いフィールド名の下で既にインデックスされたデータが無効になります。代わりに、alias
フィールドを追加して、代替のフィールド名を作成します。
インデックスのマッピングを表示する
既存のインデックスのマッピングを表示するには、マッピングを取得するAPIを使用できます。
Python
resp = client.indices.get_mapping(
index="my-index-000001",
)
print(resp)
Ruby
response = client.indices.get_mapping(
index: 'my-index-000001'
)
puts response
Go
res, err := es.Indices.GetMapping(es.Indices.GetMapping.WithIndex("my-index-000001"))
fmt.Println(res, err)
Js
const response = await client.indices.getMapping({
index: "my-index-000001",
});
console.log(response);
コンソール
GET /my-index-000001/_mapping
コンソール-結果
{
"my-index-000001" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "integer"
},
"email" : {
"type" : "keyword"
},
"employee-id" : {
"type" : "keyword",
"index" : false
},
"name" : {
"type" : "text"
}
}
}
}
}
特定のフィールドのマッピングを表示する
1つ以上の特定のフィールドのマッピングのみを表示したい場合は、フィールドマッピングを取得するAPIを使用できます。
これは、インデックスの完全なマッピングが必要ない場合や、インデックスに多数のフィールドが含まれている場合に便利です。
次のリクエストは、employee-id
フィールドのマッピングを取得します。
Python
resp = client.indices.get_field_mapping(
index="my-index-000001",
fields="employee-id",
)
print(resp)
Ruby
response = client.indices.get_field_mapping(
index: 'my-index-000001',
fields: 'employee-id'
)
puts response
Go
res, err := es.Indices.GetMapping(es.Indices.GetMapping.WithIndex("my-index-000001"))
fmt.Println(res, err)
Js
const response = await client.indices.getFieldMapping({
index: "my-index-000001",
fields: "employee-id",
});
console.log(response);
コンソール
GET /my-index-000001/_mapping/field/employee-id
コンソール-結果
{
"my-index-000001" : {
"mappings" : {
"employee-id" : {
"full_name" : "employee-id",
"mapping" : {
"employee-id" : {
"type" : "keyword",
"index" : false
}
}
}
}
}
}