【问题标题】:Elastic Search JSON String:JSONObject indexing弹性搜索 JSON 字符串:JSONObject 索引
【发布时间】:2015-12-07 09:35:27
【问题描述】:

可以弹性搜索索引值如

"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 不能索引呢?

【问题讨论】:

    标签: json elasticsearch elasticsearch-indices


    【解决方案1】:

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

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

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

    有意义吗?

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

    【讨论】:

    • 有道理,谢谢。有没有办法将异构 JSON 数组索引为值?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多