当前位置: 首页 > 工具软件 > Noop > 使用案例 >

Detecting noop updates

柯轶
2023-12-01

更新文档有2中方式,索引 API_update API。后者默认情况下,如果修改操作发现内容没有实质的变化,会拒绝处理该请求,version不会递增,通过返回信息的result属性标记noop

插入数据

我们插入一条数据:

PUT twitter/_doc/1
{
    "user" : "kimchy",    //user名称是kimchy
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elasticsearch"
}

插入操作的返回值,version属性值为1:

{
"_index": "twitter",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

使用默认参数修改,参数实质有变化

ES提交修改

执行修改操作:

POST  /twitter/_doc/1/_update/
{
    "doc":{
        "user":"kimchy2"    //user名称是kimchy2,不是kimchy
    }
}

使用默认参数修改的返回值,version属性值递增为2:

{
"_index": "twitter",
"_type": "_doc",
"_id": "1",
"_version": 2,        //version递增
"result": "updated",   //显示执行了修改操作
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}

使用默认参数修改,参数实质没有变化

ES拒绝提交修改

我们再执行一次名称为user=kimchy2的修改操作,version 属性仍然是2,返回值中的resultnoop

{
"_index": "twitter",
"_type": "_doc",
"_id": "1",
"_version": 2,      //version没有变化
"result": "noop",   //标记为noop
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
}
}

使用参数强制修改,参数实质没有变化

ES提交修改

我们可以通过设置“detect_noop”来禁用此行为:false,改为强制提交修改操作,不管内容是否真的发生变化,如下所示:


POST twitter/_doc/1/_update
{
    "doc" : {
        "name" : "lisi"
    },
    "detect_noop": false      //强制提交修改操作
}

我们再来看下执行结果:

{
"_index": "twitter",
"_type": "_doc",
"_id": "1",
"_version": 3,        //version递增
"result": "updated",  //显示执行了修改操作
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
 类似资料:

相关阅读

相关文章

相关问答