代码之家  ›  专栏  ›  技术社区  ›  wowkin2

ElasticSearch对象的部分更新(multi=true)

  •  0
  • wowkin2  · 技术社区  · 6 年前

    如何使用字段映射更新文档 Object(multi=True) , 当一个文档可以同时具有单个值(字典)和多个值(字典列表)时。

    同一索引中的文档示例:

    中的单个值 items :

    {
        "title": "Some title",
        "items": {
            "id": 123,
            "key": "foo"
        }
    }
    

    中的多个值 项目 :

    {
        "title": "Some title",
        "items": [{
            "id": 456,
            "key": "foo"
        }, {
            "id": 789,
            "key": "bar"
        }]
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   wowkin2    6 年前


    inline

    POST index_name/_update_by_query
    {
        "search": {
            "term": {
                "items.key": "foo"
            }
        },
        "script": {
            "inline": "
                if (ctx._source.items instanceof List) {
                    for (item in ctx.source.items) {
                        if (item.key == params.old_value) {
                            item.key = params.new_value;
                            break;
                        }
                    }
                } else {
                    ctx._source.items.key = params.new_value;
                }
            ",
            "params": {"old_value": "foo", "new_value": "bar"},
            "lang": "painless'
        }
    }
    

    "inline": "if (ctx._source.items instanceof List) {for (item in ctx.source.items) {if (item.key == params.old_value) {item.key = params.new_value;break;}}} else {ctx._source.items.key = params.new_value;}"