我被告知“每个类型都有自己的映射或架构定义”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。
,这个问题就消失了我不太明白上面的行为。我想念一下吗?
提前致谢。
答案 0 :(得分:1)
声明
每种类型都有自己的映射或模式定义
是真的。但这不是完整的信息。 在一个索引中具有相同字段的不同类型之间可能存在冲突。
映射类型用于对字段进行分组,但是每个字段中的字段 映射类型不是彼此独立的。字段:
- 同名
- 在同一索引中
- 采用不同的映射类型
在内部映射到同一字段,并且必须具有相同的映射。如果一个
title
和user
映射类型中都存在blogpost
字段title
个字段在每种类型中必须具有完全相同的映射。唯一的 此规则的例外情况是copy_to
,dynamic
,enabled
,ignore_above
,include_in_all
和properties
参数,可能是。{ 每个字段有不同的设置。