【问题标题】:How to restrict a field in Elasticsearch document to be updated?如何限制 Elasticsearch 文档中的字段被更新?
【发布时间】:2021-05-06 08:29:00
【问题描述】:

我有一个 Elasticsearch 索引,我正在将文档保存到索引中。

有什么办法,当我尝试再次索引/保存相同的文档(具有相同的_id)时,某些字段的新值/更新值, Elasticsearch 应该抛出异常,

仅当该特定字段是我们要更新的内容时?对于其他字段,它可以作为默认行为。

例如:我有如下索引映射

PUT /_index_template/example_template
{
   "index_patterns": [
        "example*"
    ],
    "priority": 1,
    "template": {
        "aliases": {
            "example":{}
        },
    "mappings": {
      "dynamic":"strict",
      "_source":
      {"enabled": false},
      "properties": {
        "SomeID": {
        "type": "keyword"
      },
      "AnotherInfo": {
        "type": "keyword"
      }
    }
  }
  }
}

然后我根据这个索引映射创建一个索引

PUT example01

之后我根据这个索引保存一个文档

POST example01/_doc/1
{
  "SomeId": "abcdedf",
  "AnotherInfo":"xyze"
}

如果我下次尝试使用不同的“SomeId”值再次保存文档

POST example01/_doc/1
    {
      "SomeId": "uiiuiiu",
      "AnotherInfo":"xyze"
    }

我想说“抱歉“someId”字段无法更新”

基本上,防止文档字段在 Elastic 中更新 搜索。

提前致谢!

【问题讨论】:

    标签: elasticsearch elastic-stack


    【解决方案1】:

    默认情况下,弹性搜索支持对文档的修订,这意味着它使用生成的 _id 跟踪索引文档的更改,并且每次您使用 id 17 操作文档时,它都会增加 @Version 字段的值,因此您不能有两个如果您没有 custom_routing,则具有相同 id 的重复文档,但如果您有自定义路由,请始终注意 _id 字段上的重复,因为该字段不仅是标识符,它还记录它所在的分片。

    此外,我猜弹性无法在文档中的字段级别强制实施限制,您可以根据角色控制在应用程序级别或字段级别安全性上更新字段的限制。

    作为字段级别安全性的示例,请考虑以下角色定义仅授予对所有 events-* 数据流和索引中的类别、@timestamp 和消息字段的读取访问权限。

    POST /_security/role/test_role1
    {
      "indices": [
        {
          "names": [ "events-*" ],
          "privileges": [ "read" ],
          "field_security" : {
            "grant" : [ "category", "@timestamp", "message" ]
          }
        }
      ]
    }

    【讨论】:

    • 感谢您的回复,我已经更详细地更新了问题,基本上是否有任何参数可以设置,同时提供映射或任何其他方式来限制特定字段的更新,在它被索引后?
    • 太好了,现在我赞成你的问题!,我猜弹性无法在字段级别强制执行限制,你应该在应用程序级别管理限制。在此处阅读更多信息discuss.elastic.co/t/…
    • 感谢您的支持!在您提到的链接中,他们说可以使用elastic.co/guide/en/elasticsearch/reference/current/… 来完成?对吗?
    • 是的,您可以在应用程序级别而不是数据库字段级别控制它。
    • 我还编辑了与您的问题编辑相关的答案。
    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2021-12-15
    • 2018-01-31
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多