Elasticsearch 嵌套类型(nested) updata操作

映射类型(mapping)

PUT nested_test
{
    "settings": {
        "number_of_replicas": 0, 
        "number_of_shards": 1
    },
    "mappings": {
        "article":{
            "properties": {
                "title":{
                    "type": "text",
                    "analyzer": "hanlp"
                },
                "content":{
                    "type":"text",
                    "analyzer": "hanlp"
                },
                "promission":{ 
                    "type": "nested",
                    "properties": {
                        "user_name":{
                            "type": "keyword"
                        },
                        "user_id":{
                            "type": "keyword"
                        },
                        "role_name":{
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}

导入测试数据

    POST nested_test/article/_bulk
    {"index":{}}
    {"title":"习近平:中国改革开放必然成功,也一定能够成功!","content":"新华网北京4月10日电 习近平说,今天,中国人民完全可以自豪地说,改革开放这场中国的第二次革命,不仅深刻改变了中国,也深刻影响了世界!他指出,   中国改革开放必然成功,也一定能够成功! ​​​​(据新华社“新华视点”微博)","promission_obj":  {"user_name":"MM","user_id":"001","role_name":"QA"}}   
    {"index":{}}
    {"title":"金句来了!速览“习近平的博鳌时间”重要主旨演讲","content":"新华网北京4月10日电  4月10日上午,中国国家主席习近平应邀出席博鳌亚洲论坛2018年年会开幕式并发表重要主旨演讲。","promission_obj":{"user_name":"ZZ","user_id":"005","role_name":"QP"}}
    {"index":{}}
    {"title":"习近平会见萧万长一行","content":"新华社海南博鳌4月10日电(记者侯丽军 查文晔)中共中央总书记习近平10日上午在海南博鳌会见前来出席博鳌亚洲论坛2018年年会的台湾两岸共同市场基金会荣誉董事长萧万长一行","promission_obj":{"user_name":"GG","user_id":"002","role_name":"QC"}}
    {"index":{}}
    {"title":"习近平同奥地利总统范德贝伦举行会谈","content":"4月8日,国家主席习近平在北京人民大会堂同奥地利总统范德贝伦举行会谈。这是会谈前,习近平在人民大会堂北大厅为范德贝伦举行欢迎仪式","promission_obj":{"user_name":"JJ","user_id":"003","role_name":"QE"}}
    {"index":{}}
    {"title":"新华网评:开放成为博鳌深深的青春印记","content":"18年来,博鳌亚洲论坛始终致力于提供高层对话平台,以增进和深化贸易、投资联系,推动建立伙伴关系,加深亚洲跨文化间相互理解。开放,自始至终都是政府、企业和专家学者在论坛反复强调的共识和举措;开放,更是亚洲经济繁荣发展的客观要求和内生动力","promission_obj":{"user_name":"JJ","user_id":"003","role_name":"QE"}}
    {"index":{}}
    {"title":"农村电商产业为乡村振兴打下坚实基础","content":"新华网北京4月2日电(胡可璐)今年全国两会期间,“乡村振兴”成为热点话题,连日来讨论热度不减。乡村振兴,产业兴旺是重点","promission_obj":  {"user_name":"DD","user_id":"004","role_name":"QO"}}
    {"index":{}}
    {"title":"广西金桔搭上“电商”路 助力当地农民脱贫致富","content":"在广西省融安县,金桔产业已经打出了“桔乡里”这个响当当的网红电商品牌。谈到当前农村电商的发展问题时,柳州市融安县金色桔韵金桔专业合作社电子商务总经理赖园园表示,绿色健康、品质稳定的农产品,健全的物流体系,政府的政策扶持以及当地健全的电子商务体系是农产品电商成功的关键因素。","promission_obj":{"user_name":"MM","user_id":"001","role_name":"QA"}}

查询数据

GET nested_test/_search
{
    "query": {
        "bool": {
            "must": [
               {
                   "multi_match": {
                      "query": "习近平重要演讲",
                      "fields": ["title","content"]
                    }
               },
               {
                   "nested": {
                      "path": "promission",
                      "query": {
                          "bool": {
                              "must": [
                                 {"term": {
                                    "promission.role_name": "QP"
                                 }}
                              ]
                          }
                      }
                   }
               }
            ]
        }
    }
}
查询结果

如果我想修改嵌套对象promisson_ojb该如何操作?以下几种方法都可以实现:

执行update API

POST nested_test/article/AWK9Bc0xm0GWwboR_ssF/_update
{
    "doc":{
            "promission_obj":[
                {
                 "user_name": "ZZ",
                 "user_id": "005",
                 "role_name": "QP"
                },
                {
                 "user_name": "ZL",
                 "user_id": "009",
                 "role_name": "QX" 
                }
            ] 
        }
    "detect_noop": false
}

使用doc,会自动合并到现有的文档中。detect_noop属性会检测写入内容是否与现有文档相同,默认为true,相同就不会写入。false表示无视是否修改,强制合并到现有的文档。
或者

POST nested_test/article/AWK9Bc0xm0GWwboR_ssF/_update
{
    "scripted_upsert":true,
    "script":{
        "inline":"ctx._source.promission_obj  = params.promission2",
        "lang":"painless",
        "params":{
              "promission2":[
                        {
                              "user_name": "ZL",
                              "user_id": "009",
                              "role_name": "QM"
                        },
                       {
                              "user_name": "ZZ",
                              "user_id": "005",
                              "role_name": "QP"
                        }
                ]
            }     
          },
            "upsert":{}
}

以上两种都是重新写入嵌套数组(不管之前是什么,重新写入一次)不需要讨论某个嵌套对象的删除,修改操作,如果嵌套对象的数量较多,浪费系统资源,影响检索效率。那么我需要针对某一个嵌套对象进行增删改,该如何操作?以下是针对一个对象的操作:

新增

  POST nested_test/article/AWK9Bc0xm0GWwboR_ssF/_update
{
    "script":{
        "inline":"ctx._source.promission_obj.add(params.promission)",
        "lang":"painless",
        "params":{
            "promission":{
                 "role_name": "QQ",
                 "user_id": "009",
                 "user_name": "DM"
            }
             
        }
       
    }
}

修改

POST nested_test/article/AWK9Bc0xm0GWwboR_ssF/_update
{
    "script": {
    "lang": "painless",
    "inline": "
        int i = 0;
        for(LinkedHashMap promission:ctx._source.promission_obj){
        if(promission.user_id == params.user_id)
        {
            ctx._source.promission_obj[i] = params.promission;
        }
        i++;
        }
      ",
    "params": {
        "promission": {
                "user_name": "ZO",
                "user_id": "011",
                "role_name": "QA"
            }
        }
    }

删除

POST nested_test/article/AWK9Bc0xm0GWwboR_ssF/_update
{
    "script":{
        "inline":"
             int i=0;
             for(LinkedHashMap pm :ctx._source.promission_obj){
             if(pm.user_id==params.promission.user_id)
             {
                    ctx._source.promission_obj.remove(i)
             }
             i++;
             }
             ",
        "lang":"painless",
        "params":{
            "promission":
                {    
                    "user_id": "009"     
                }
        }
       
    }
}

笔记

script添加/移除字段

POST my_index/type/id/_update
{
    "script" : "ctx._source.name_of_new_field = \"fieldName\""
}
POST my_index/type/id/_update
{
    "script" : "ctx._source.remove(\"fieldName\")"
}

脚本判断:如果tag标签里面有del标记则删除该文档

POST my_index/type/id/_update
{
    "script" : {
        "inline": "ctx._source.tags.contains(tag) ? ctx.op = \"delete\" : ctx.op = \"none\"",
        "params" : {
            "tag" : "del"
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容