弹性搜索 JSON String:JSONObject 索引

Elastic Search JSON String:JSONObject indexing

可以elasticsearch索引值如

"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 格式吗?如果是这样,那为什么 elastic 不能索引它?

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

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

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

有道理吗?

您可能会发现 this post 有帮助。

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

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

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