首页 > 解决方案 > 尝试在 elasticsearch 中重命名嵌套对象名称时出错

问题描述

我正在尝试重命名这种形状的数据:

在此处输入图像描述

使用这个:

POST r_xair_signals-2020-06/_update/2020-06-15T22:23:00Z_-1344027716
{
  "doc" : {
        "Customer ImpactedNested" : "CustomerImpactedNested"
    }
}

但我得到:

"type": "mapper_parsing_exception",
    "reason": "object mapping for [Customer ImpactedNested] tried to parse field [Customer ImpactedNested] as object, but found a concrete value"

我已经确认 Customer ImpactedNested 的类型是嵌套的。我在网上看到有关人们收到此错误的信息,但在尝试重命名时却没有,也没有看到任何解决方案。我看到一篇文章指出当新名称与现有名称冲突时会发生这种情况。因此,尝试重命名为 CustomerImpactedNested11111 作为测试(肯定是唯一的),但结果相同。

任何想法都会很棒!

标签: elasticsearchelastic-stackelasticsearch-nested

解决方案


其实有两个问题。

  1. 您的查询未重命名该字段。
  2. 重命名嵌套字段

问题的以下行中实际发生了什么:

POST r_xair_signals-2020-06/_update/2020-06-15T22:23:00Z_-1344027716
{
  "doc" : {
        "Customer ImpactedNested" : "CustomerImpactedNested"
    }
}

它将的列值更新为id 为column=Customer ImpactedNested的文档。CustomerImpactedNested2020-06-15T22:23:00Z_-1344027716

AndCustomer ImpactedNested是一个嵌套对象,您正在尝试为string嵌套对象字段设置一个值。因此你得到了错误。参考这个

来到你原来的问题,你需要通过reindex. 参考这个这个也

POST _reindex
{
  "source": {
    "index": "r_xair_signals-2020-06"
  },
  "dest": {
    "index": "<some_new_index_name>"
  },
  "script": {
    "inline": """ctx._source['CustomerImpactedNested'] = ctx._source.remove("Customer ImpactedNested")"""
  }
}

请尝试上述方法并让我知道错误,因为我没有尝试上述查询。


推荐阅读