elasticsearch字段映射会影响同一索引

时间:2016-03-18 08:46:45

标签: elasticsearch

我被告知“每个类型都有自己的映射或架构定义”the official guide

但我遇到的事实是映射会影响同一索引中的其他类型。情况如下:

映射定义:

[root@localhost agent]# curl localhost:9200/agent*/_mapping?pretty
{
  "agent_data" : {
    "mappings" : {
      "host" : {
        "_all" : {
          "enabled" : false
        },
        "properties" : {
          "ip" : {
            "type" : "ip"
          },
          "node" : {
            "type" : "string",
            "index" : "not_analyzed"
          }
        }
      },
      "vul" : {
        "_all" : {
          "enabled" : false
        }
      }
    }
  }
}

然后我索引记录:

[root@localhost agent]# curl -XPOST 'http://localhost:9200/agent_data/vul?pretty' -d '{"ip": "1.1.1.1"}'
{
  "error" : {
    "root_cause" : [ {
      "type" : "mapper_parsing_exception",
      "reason" : "failed to parse [ip]"
    } ],
    "type" : "mapper_parsing_exception",
    "reason" : "failed to parse [ip]",
    "caused_by" : {
      "type" : "number_format_exception",
      "reason" : "For input string: \"1.1.1.1\""
    }
  },
  "status" : 400
}

似乎它试图将ip解析为数字。所以我在这个领域加了一个数字:

[root@localhost agent]# curl -XPOST 'http://localhost:9200/agent_data/vul?pretty' -d '{"ip": "1123"}'
{
  "error" : {
    "root_cause" : [ {
      "type" : "remote_transport_exception",
      "reason" : "[Argus][127.0.0.1:9300][indices:data/write/index[p]]"
    } ],
    "type" : "illegal_argument_exception",
    "reason" : "mapper [ip] cannot be changed from type [ip] to [long]"
  },
  "status" : 400
}

如果我明确将vul类型的ip字段定义为ip field-type。

,这个问题就消失了

我不太明白上面的行为。我想念一下吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

声明

  

每种类型都有自己的映射或模式定义

是真的。但这不是完整的信息。 在一个索引中具有相同字段的不同类型之间可能存在冲突。

Mapping - field conflicts

  

映射类型用于对字段进行分组,但是每个字段中的字段   映射类型不是彼此独立的。字段:

     
      
  • 同名
  •   
  • 在同一索引中
  •   
  • 采用不同的映射类型
  •   
     

在内部映射到同一字段,并且必须具有相同的映射。如果一个   titleuser映射类型中都存在blogpost字段   title个字段在每种类型中必须具有完全相同的映射。唯一的   此规则的例外情况是copy_todynamicenabled,   ignore_aboveinclude_in_allproperties参数,可能是。{   每个字段有不同的设置。