【问题标题】:PUT mappings API overriding the exsisting mappings in ElasticsearchPUT 映射 API 覆盖 Elasticsearch 中的现有映射
【发布时间】:2021-06-10 06:33:53
【问题描述】:

我创建了一个索引模板,我在其中为“关键字”字段类型定义了一个“ignore_above”映射参数。

现在我想更新映射并希望使用 PUT 映射 API 为相同的“关键字”字段添加一个新参数“eager_global_ordinals”,

我可以看到 API 返回 200OK。

所以当我调用 GET index-name 来验证映射时,我可以看到新的映射“eager_global_ordinals”,但看不到“ignore_above”?

我查了一下,发现“ignore_above”属性被默认值覆盖了?

意味着 PUT 映射 API 将映射参数覆盖为默认值,如果我没有传递任何参数。

有没有办法避免这种行为?

我依次尝试过的命令:

PUT /_index_template/example_template
{
   "index_patterns": [
        "example*"
    ],
    "priority": 1,
    "template": {
        "aliases": {
            "example":{}
        },
    "mappings": {
      "_source":
      {"enabled": false},
      "properties": {
       "SomeID":
        { "type": "keyword", "index" : true,"store":true,"ignore_above":5}
      }
    }
  }
}

PUT example10022021
GET example10022021

在此 GET API 响应中,您可以在映射中看到“ignore_above”参数

PUT /example/_mappings
{
    "properties": {
      "SomeID": {
        "type": "keyword",
        "store":true,
        "eager_global_ordinals":true
      }
    }
}

又来了

GET example10022021

现在您可以在响应中看到“ignore_above”参数是 不存在

【问题讨论】:

  • 您可以分享您运行的命令以便我们重现该问题吗?
  • @Val 感谢您与我们联系!我已经用我尝试过的 API 更新了问题,你能帮忙吗?

标签: elasticsearch


【解决方案1】:

没错,同样的原因你需要重新指定store: true否则更新不起作用(因为它会采用默认值false),你还需要重新指定@987654324 @:

所以你可以这样做:

PUT /example/_mappings
{
    "properties": {
      "SomeID": {
        "type": "keyword",
        "store":true,
        "ignore_above": 5,
        "eager_global_ordinals":true
      }
    }
}

【讨论】:

  • 谢谢@Val!但这似乎不是一个可行的解决方案,因为我必须跟踪所有以前的映射,如果我什至忘记提及其中一个,那么它将回到默认值,不是吗?方式还是黑客?还是这是唯一的解决方案?
  • 我不明白的是,您为什么不在原始模板中设置它以确保正确创建索引,而不是事后修补映射。你能解释一下为什么需要分两步做吗?
  • 例如:我有一个客户,有一个需要索引的大数据,所以客户指定,让我们说“ignore_above”,但随着需求不断变化,客户意识到“eager_global_ordinals”也必须在那里,但是这次客户端不知道(或可能不小心),如果它没有指定 prev 映射参数,它们将使用默认值覆盖并更新映射,那么它将导致行为的改变,这就是为什么我想找到一种方法
  • 在我看来,如果你让你的客户弄乱他们的索引,他们至少应该知道它是如何工作的以及他们在做什么,否则他们应该依赖知道的人。否则你会陷入大混乱。索引模板的全部目的是能够更改要创建的下一个索引的映射,因此与其更改现有索引映射,不如简单地更改索引模板,然后创建新索引和/或滚动到新索引
  • 你好@val,你能看看这个问题吗,stackoverflow.com/questions/66797606/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2012-07-11
  • 1970-01-01
  • 2017-10-08
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多