如何限制Elasticsearch文档中的字段进行更新



我有一个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中更新搜索

提前感谢!

默认情况下,弹性搜索支持对文档进行修订,这意味着它可以用生成的_id跟踪索引文档上的更改,每次操作文档(例如id为17的文档(时,它都会增加@Version字段的值,这样,如果没有custom_routing,就不会有两个id相同的重复文档,但如果有自定义路由,请始终小心关于id字段上的重复,因为这个字段不仅仅是标识符,它还记录了它所在的碎片。

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

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

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

最新更新