我发现弹性搜索中的轰鸣声数据使我感到困惑:
{
"_index": "statsd-2015.09.24",
"_type": "counter",
"_id": "AU__eqbL4jN5fst_IEyK",
"_score": 1,
"_source": {
"ns": "statsd",
"grp": "bad_lines_seen",
"tgt": "",
"act": "",
"val": 0,
"@timestamp": 1443072093000
}
},
{
"_index": "statsd-2015.09.24",
"_type": "counter",
"_id": "AU__fKQM4jN5fst_IEy_",
"_score": 1,
"_source": {
"ns": "statsd",
"grp": "bad_lines_seen",
"tgt": "",
"act": "",
"val": "0",
"@timestamp": "1443072852000"
}
}
为什么字段 val 和时间戳以不同的格式显示?
它们的索引和类型相同,其映射为:
{
"statsd-2015.09.24": {
"mappings": {
"counter": {
"properties": {
"@timestamp": {
"type": "date",
"format": "dateOptionalTime"
},
"act": {
"type": "string",
"index": "not_analyzed"
},
"grp": {
"type": "string",
"index": "not_analyzed"
},
"ns": {
"type": "string",
"index": "not_analyzed"
},
"tgt": {
"type": "string",
"index": "not_analyzed"
},
"val": {
"type": "long"
}
}
}
}
}
}
这怎么可能?
答案 0 :(得分:2)
您发现文档的来源中的字段类型之间存在差异。 FK
是提交给ElasticSearch以索引文档的原始JSON。
但是,它并不是实际索引的内容:这只是为了其他目的而存储的(更多信息可以在documentation中找到)。
在您的情况下,_source
被映射为val
字段,因此第二个文档中提供的字符串值实际上被解析为其长值。
您可以轻松地检查:尝试索引像这样的文档
long
您将遇到以下解析错误:
{
"ns": "statsd",
"grp": "bad_lines_seen",
"tgt": "",
"act": "",
"val": "abc",
"@timestamp": "1443072852000"
}
所以,回答你的问题:你的价值观'类型是不同的,但实际上由于解析,这些值都被编入索引为MapperParsingException[failed to parse [val]]; nested: NumberFormatException[For input string: \"abc\"];
。
答案 1 :(得分:0)
有关其他信息:
输出:{"@timestamp": "2019-03-21T10:52:35.435Z"}
索引映射:"@timestamp": {"type": "date"}
输出:{"@timestamp": 1443072852000}
索引映射:"@timestamp": {"type": "date","format": "epoch_millis"}