【问题标题】:Error when trying to rename a nested object name in elasticsearch尝试在 elasticsearch 中重命名嵌套对象名称时出错
【发布时间】:2020-10-09 20:49:20
【问题描述】:

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

使用这个:

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 作为测试(肯定是唯一的),但结果相同。

任何想法都会很棒!

【问题讨论】:

  • 我找到了解决此问题的方法,但我还无法测试您的答案。不过,计划在本周末之前完成。并感谢您的回答!

标签: elasticsearch elastic-stack elasticsearch-nested


【解决方案1】:

其实有两个问题。

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

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

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

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

Customer ImpactedNested 是一个嵌套对象,您正试图将string 值设置为嵌套对象字段。因此你得到了错误。 Refer this

来到你原来的问题,你需要通过reindex来做这件事。 Refer this, this also

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")"""
  }
}

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

【讨论】:

  • 在我将目标索引更改为不同的索引后,上述操作有效。当我按原样尝试时,出现关于无法重新索引到正在读取的索引的错误。弹性工程师解释了为什么:“我们选择不让重新索引索引回到相同的索引,因为在大多数情况下这样做不是正确的......”这是 2017 年 2 月 9 日来自 nik9000 的评论:github.com/elastic/elasticsearch/issues/23033。评论中的内容比我在这里包含的更多。
  • 谢谢,我会检查链接并更新。如果您觉得我的回答有帮助,您可以投票/接受/两者兼而有之。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
相关资源
最近更新 更多