Kibana(六):数据映射错误二则

1. 日期格式

将日期格式映射为“strict_date_optional_time||epoch_millis”,在输入数据“2003/4/7”时,提示如下错误:

root_cause: [{type: "mapper_parsing_exception", reason: "failed to parse [work_date]"}]
type: "illegal_argument_exception", reason: "Invalid format: "2003/4/7" is malformed at "/4/7""

检阅文档,提示日期可以为以下三种格式:
1. 2015-01-01[文本格式];
2. 2015-01-01T12:10:30Z[文本格式];
3. 1420070400001[数字格式];

针对文本格式,对间隔符的要求不高,无论是“-”还是“/”都能自动识别,但是字符的位数要严格匹配,例如本例中出错的原因就在于“2003/4/7”位数不全,应该补齐为“2003/04/07”。

2. 地理格式

将位置信息声明为“geo_point”时,提交如下的数据:

"addr_geo" : ["24.31", "117.39"]

提示如下错误:

{"error":{"root_cause":[
{"type":"mapper_parsing_exception","reason":"failed to parse"}],
"type":"mapper_parsing_exception","reason":"failed to parse",
"caused_by":{"type":"illegal_argument_exception","reason":"illegal latitude value [268.76953125] for addr_geo"}},
"status":400}

显然数据错误得大了,纬度的范围为南纬90°到北纬90°,不可能出现这么大的数字,检查了好几遍数据,发现数据中并没有“268.76953125”的数字,这说明是elasticsearch自己进行的数字转换。

elasticsearch支持的地理数据格式有两种:
1. 数组代表的经纬度数据[lon, lat],经度在前,维度在后;
2. JSON对象格式的经纬度数据,{lat: number, lon: number}

需要注意的是,这两种格式都要求数据为Number,不可是字符串,否则可能会出现解析错误。

另外,南纬与西经为负值,北纬与东经为正值,所以维度的取值范围是[-90, 90],经度的取值范围为[-180, 180],如果不好记忆,请记住处于东经北半球的中国的经纬度信息(都是正数):
1. 经度范围:[73.66, 135.05]
2. 维度范围:[3.86, 53.55]

你可能感兴趣的:(kibana)