elasticsearch (6.x) 带去重的追加数组元素

实现往 _id 为 0000000000 的 doc 中的 field_1 字段中带去重的追加数组元素 “111”,逻辑如下:

如果 (没有 _id 为 0000000000的 doc) {
    利用 upsert 创建该 doc
} 否则 {
    如果 (该 doc 中包含 field_1 字段) {
        如果 (field_1 字段的值中不包含 "111") {
            在 field_1 字段中添加 "111"
        }
    } 否则 {
        创建 field_1 字段,并将 "111"写入
    }
}

在 kibana 下的代码:

POST test_index/test_type/0000000000/_update
{
   "script" : {
       "source": "if(ctx._source.containsKey('field_1')){if(!ctx._source.field_1.contains('111')){ctx._source.field_1.add('111')}}else{ctx._source.field_1=['111']}"
   },
   "upsert": {
       "field_0":"0000000000",
       "field_1":["111"]
   }
}

在 curl 下执行一条语句的代码:

curl -XPOST http://192.168.1.100:9200/test_index/test_type/0000000000/_update -H 'Content-Type: application/json' -d '{"script":{"source":"if(ctx._source.containsKey('field_1')){if(!ctx._source.field_1.contains('111')){ctx._source.field_1.add('111')}}else{ctx._source.field_1=['111']}"},"upsert":{"field_0":"0000000000","field_1":["111"]}}'

在 curl 下执行一个文件的代码(-H ‘Content-Type: application/json’ 为 6.x 之后需要):

curl -XPOST http://192.168.1.100:9200/test_index/test_type/_bulk -H 'Content-Type: application/json' --data-binary @yourpath/yourfile

其中文件每两行的内容:

{"update":{"_id":"0000000000"}}
{"script":{"source":"if(ctx._source.containsKey('field_1')){if(!ctx._source.field_1.contains('111')){ctx._source.field_1.add('111')}}else{ctx._source.field_1=['111']}"},"upsert":{"field_0":"0000000000","field_1":["111"]}}

另外,script 中的变量可以用参数(params)表示,以在 kibana 下的代码为例:

POST test_index/test_type/0000000000/_update
{
   "script" : {
       "source": "if(ctx._source.containsKey(params.fieldname)){if(!ctx._source.field_1.contains(params.content)){ctx._source.field_1.add(params.content)}}else{ctx._source.field_1=[params.content]}",
       "params": {
         "fieldname": "field_1",
         "content": "111"
       }
   },
   "upsert": {
     "field_0":"0000000000",
     "field_1":["111"]
   }
}
已标记关键词 清除标记
相关推荐
<p> <b><span style="background-color:#FFE500;">【超实用课程内容】</span></b> </p> <p> <br /> </p> <p> <br /> </p> <p> 本课程内容包含讲解<span>解读Nginx基础知识,</span><span>解读Nginx核心知识、领学员进行</span>高并发环境下Nginx性能优化实战,让学生能够快速将所学融合到企业应用中。 </p> <p> <br /> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><br /> </b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b><span style="background-color:#FFE500;">【课程如何观看?】</span></b> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> PC端:<a href="https://edu.csdn.net/course/detail/26277"><span id="__kindeditor_bookmark_start_21__"></span></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a> </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 移动端:CSDN 学院APP(注意不是CSDN APP哦) </p> <p style="font-family:Helvetica;color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 本课程为录播课,课程永久有效观看时长,大家可以抓紧时间学习后一起讨论哦~ </p> <p style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <br /> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <strong><span style="background-color:#FFE500;">【学员专享增值服务】</span></strong> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> <b>源码开放</b> </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化 </p> <p class="ql-long-24357476" style="font-family:"color:#3A4151;font-size:14px;background-color:#FFFFFF;"> 下载方式:电脑登录<a href="https://edu.csdn.net/course/detail/26277"></a><a href="https://edu.csdn.net/course/detail/27216">https://edu.csdn.net/course/detail/27216</a>,播放页面右侧点击课件进行资料打包下载 </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页