Skip to content

Latest commit

 

History

History
executable file
·
68 lines (59 loc) · 1.89 KB

ignore_malformed.md

File metadata and controls

executable file
·
68 lines (59 loc) · 1.89 KB

ignore_malformed

有时候没办法控制接收到的数据。一个用户可能会向login字段发送一个日期数据,另一个用户可能会向login字段发送一个email地址。

索引错误数据到字段默认会引发异常,并拒绝整个文档。如果将ignore_malformed参数设置为true,可以忽略整个异常。错误的字段不会被索引,但是文档中其他的字段正常处理。

curl -XPUT 'localhost:9200/my_index?pretty' -d'
{
  "mappings": {
    "my_type": {
      "properties": {
        "number_one": {
          "type": "integer",
          "ignore_malformed": true
        },
        "number_two": {
          "type": "integer"
        }
      }
    }
  }
}'
curl -XPUT 'localhost:9200/my_index/my_type/1?pretty' -d'
{
  "text":       "Some text value",
  "number_one": "foo" 	// 1
}'
curl -XPUT 'localhost:9200/my_index/my_type/2?pretty' -d'
{
  "text":       "Some text value",
  "number_two": "foo" 	// 2
}'
  • 1 text字段正常被索引,number_one字段忽略
  • 2 整个文档都会被拒绝,因为number_two不允许错误的值。

同一个索引中相同名字的字段可以有不同的ignore_malformed。可以通过PUT mapping API关闭已存在字段的ignore_malformed值。

索引级别的默认值

index.mapping.ignore_malformed可以在索引级别设置,以允许在所有映射类型中全局忽略错误内容。

curl -XPUT 'localhost:9200/my_index?pretty' -d'
{
  "settings": {
    "index.mapping.ignore_malformed": true 	// 1
  },
  "mappings": {
    "my_type": {
      "properties": {
        "number_one": { 	// 2
          "type": "byte"
        },
        "number_two": {
          "type": "integer",
          "ignore_malformed": false 	// 3
        }
      }
    }
  }
}'
  • 1 2 number_one字段继承了索引级别的设置
  • 3 number_two字段覆盖了ignore_malformed的索引级别设置。