【问题标题】:Scala save array in ElasticSearchScala 在 ElasticSearch 中保存数组
【发布时间】:2021-09-10 02:37:24
【问题描述】:

我的数据框中有一个字段,其中包含我将其转换为 JSON 数组字符串的聚合值列表。 当我尝试将我的数据框保存到 ElasticSearch 中时,我收到此错误:

org.elasticsearch.hadoop.rest.EsHadoopRemoteException: mapper_parsing_exception: [userSegments] 的对象映射尝试将字段 [userSegments] 解析为对象,但找到了具体值

这是我的专栏 userSegments 的示例

{{"segmentID":"c42cc7d7-b2c6-44fa-bc1e-edd8854f2590","segmentName":"Women"},{"segmentID":"cb5b0e7b-cf7c-4395-82a3-4076075d3e6d","segmentName":"Mode"}}

这是我的索引映射:

"userSegments": {
          "properties": { 
           "segmentID": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
                }
            },           
            "segmentName": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        }

我已经检查过,我的所有记录都与提供的记录相似或为空,因此没有提供给 ES 的数据类型混合。

知道如何解决这个问题吗?

非常感谢 马修

【问题讨论】:

  • 解决方案没用吗?

标签: scala elasticsearch hadoop


【解决方案1】:

使用这些映射,这应该可以工作:

PUT /<your-index>/_doc/doc-1
{
  "userSegments": [
    {
      "segmentID": "c42cc7d7-b2c6-44fa-bc1e-edd8854f2590",
      "segmentName": "Women"
    },
    {
      "segmentID": "cb5b0e7b-cf7c-4395-82a3-4076075d3e6d",
      "segmentName": "Mode"
    }
  ]
}

因此,您需要检查获取您的数据框并构建弹性查询的代码是否在执行不同的操作。

您的错误强烈表明您的代码正在将数据解析为字符串:

PUT /<your-index>/_doc/doc-2
{
  "userSegments": """[{
      "segmentID": "c42cc7d7-b2c6-44fa-bc1e-edd8854f2590",
      "segmentName": "Women"
    },
    {
      "segmentID": "cb5b0e7b-cf7c-4395-82a3-4076075d3e6d",
      "segmentName": "Mode"
    }]"""
}

您应该尝试从您的数据构造一个实际的 JSON 数组,就像我第一次展示的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2015-11-20
    相关资源
    最近更新 更多