ignore_malformed
時には、受け取るデータをあまり制御できないことがあります。あるユーザーは、[login
]フィールドをdate
として送信し、別のユーザーはlogin
フィールドをメールアドレスとして送信します。
間違ったデータ型をフィールドにインデックスしようとすると、デフォルトで例外がスローされ、ドキュメント全体が拒否されます。ignore_malformed
パラメータがtrue
に設定されている場合、例外を無視することができます。誤った形式のフィールドはインデックスされませんが、ドキュメント内の他のフィールドは通常通り処理されます。
例えば:
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"number_one": {
"type": "integer",
"ignore_malformed": True
},
"number_two": {
"type": "integer"
}
}
},
)
print(resp)
resp1 = client.index(
index="my-index-000001",
id="1",
document={
"text": "Some text value",
"number_one": "foo"
},
)
print(resp1)
resp2 = client.index(
index="my-index-000001",
id="2",
document={
"text": "Some text value",
"number_two": "foo"
},
)
print(resp2)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
number_one: {
type: 'integer',
ignore_malformed: true
},
number_two: {
type: 'integer'
}
}
}
}
)
puts response
response = client.index(
index: 'my-index-000001',
id: 1,
body: {
text: 'Some text value',
number_one: 'foo'
}
)
puts response
response = client.index(
index: 'my-index-000001',
id: 2,
body: {
text: 'Some text value',
number_two: 'foo'
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
number_one: {
type: "integer",
ignore_malformed: true,
},
number_two: {
type: "integer",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "my-index-000001",
id: 1,
document: {
text: "Some text value",
number_one: "foo",
},
});
console.log(response1);
const response2 = await client.index({
index: "my-index-000001",
id: 2,
document: {
text: "Some text value",
number_two: "foo",
},
});
console.log(response2);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"number_one": {
"type": "integer",
"ignore_malformed": true
},
"number_two": {
"type": "integer"
}
}
}
}
PUT my-index-000001/_doc/1
{
"text": "Some text value",
"number_one": "foo"
}
PUT my-index-000001/_doc/2
{
"text": "Some text value",
"number_two": "foo"
}
このドキュメントにはtext フィールドがインデックスされますが、number_one フィールドはインデックスされません。 |
|
このドキュメントは、number_two が誤った値を許可しないため、拒否されます。 |
- [Numeric](/read/elasticsearch-8-15/8d530a3459b86d80.md)
- `````long`````, `````integer`````, `````short`````, `````byte`````, `````double`````, `````float`````, `````half_float`````, `````scaled_float
- Boolean
boolean
- Date
date
- Date nanoseconds
date_nanos
- Geopoint
geo_point
緯度/経度ポイント用- Geoshape
geo_shape
複雑な形状(ポリゴンなど)用- IP
ip
IPv4およびIPv6アドレス用
ignore_malformed
設定値は、update mapping APIを使用して既存のフィールドで更新できます。
Index-level default
#### Python
``````python
resp = client.indices.create(
index="my-index-000001",
settings={
"index.mapping.ignore_malformed": True
},
mappings={
"properties": {
"number_one": {
"type": "byte"
},
"number_two": {
"type": "integer",
"ignore_malformed": False
}
}
},
)
print(resp)
`
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
'index.mapping.ignore_malformed' => true
},
mappings: {
properties: {
number_one: {
type: 'byte'
},
number_two: {
type: 'integer',
ignore_malformed: false
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
"index.mapping.ignore_malformed": true,
},
mappings: {
properties: {
number_one: {
type: "byte",
},
number_two: {
type: "integer",
ignore_malformed: false,
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"settings": {
"index.mapping.ignore_malformed": true
},
"mappings": {
"properties": {
"number_one": {
"type": "byte"
},
"number_two": {
"type": "integer",
"ignore_malformed": false
}
}
}
}
number_one フィールドはインデックスレベルの設定を継承します。 |
|
number_two フィールドはインデックスレベルの設定をオーバーライドしてignore_malformed を無効にします。 |
Dealing with malformed fields
ignore_malformed
がオンになっていると、誤った形式のフィールドはインデックス時に静かに無視されます。可能な限り、誤った形式のフィールドを持つドキュメントの数を抑えることをお勧めします。さもなければ、このフィールドに対するクエリは意味をなさなくなります。Elasticsearchは、特別な_ignored
フィールドに対してexists
、term
、またはterms
クエリを使用することで、誤った形式のフィールドを持つドキュメントの数を簡単に確認できます。
Limits for JSON Objects
次のデータ型ではignore_malformed
を使用できません:
また、誤ったデータ型のフィールドに送信されたJSONオブジェクトを無視するためにignore_malformed
を使用することもできません。JSONオブジェクトは、波括弧"{}"
で囲まれた任意のデータであり、ネストされたデータ型、オブジェクトデータ型、および範囲データ型にマッピングされたデータを含みます。
サポートされていないフィールドにJSONオブジェクトを送信すると、Elasticsearchはエラーを返し、ignore_malformed
設定に関係なくドキュメント全体を拒否します。