0

可以弹性搜索索引值,例如

"key": [
            14.0,
            "somestring"
        ]

如果我尝试摄取这些数据,我会收到此错误

org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest: Found unrecoverable error [Bad Request(400) - [WriteFailureException; nested: MapperParsingException[failed to parse [FIXMessage.key]]; nested: NumberFormatException[For input string: "somestring"]; ]]; Bailing out..

首先,以上是有效的 JSON 格式吗?如果是这样,那么为什么弹性无法索引它?

4

2 回答 2

2

Elasticsearch 正在尝试转换"somestring"为数字,但失败了。

你的 json 是有效的,Elasticsearch 会很高兴地从一个值数组中索引同一字段的多个值,但它们必须都具有相同的类型,并且类型必须与映射中相应字段的类型匹配。

如果映射中不存在该字段,Elasticsearch 将根据它为该字段看到的第一个值使用合理的默认类型创建它。因此,如果您尝试对上面发布的内容进行索引,但该"key"字段不存在,Elasticsearch 将创建该字段,查看它找到的第一个值 ( 14.0) 并决定使用该float类型。然后它会尝试索引第二个值,"somestring",无法将其转换为浮点数,并发回错误。

有道理?

你可能会发现这篇文章很有帮助。

于 2015-09-11T01:34:27.647 回答
1

这取决于您打算如何处理这些数据。如果您只想存储和获取完整的数组,您可以简单地将 JSON 数组转换为字符串。

当您想从 Elastic 获取数组时,您必须将字符串从字符串转换回 JSON 数组。

如果你也想在这个数组里面搜索,你可以把数组拆分成多个数组,在类型之后区分。

于 2015-09-11T12:05:28.970 回答