如何限制Elasticearch文档中的某个字段更新? [英] How to restrict a field in Elasticsearch document to be updated?

查看:15
本文介绍了如何限制Elasticearch文档中的某个字段更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

当我尝试使用某个字段的新值/更新值再次索引/保存同一文档(具有ame_id)时,有没有什么方法, ElasticSearch应引发异常,

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

对于Ex:我有如下索引映射

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

我想说";对不起";某些ID";字段无法更新

基本上,阻止在Elastic中更新单据字段 搜索。

提前谢谢!

推荐答案

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

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

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

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
POST /_security/role/test_role1
{
  "indices": [
    {
      "names": [ "events-*" ],
      "privileges": [ "read" ],
      "field_security" : {
        "grant" : [ "category", "@timestamp", "message" ]
      }
    }
  ]
}

这篇关于如何限制Elasticearch文档中的某个字段更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆