带节点的elasticsearch可以只更新某个字段而不重写吗?

Can elasticsearch with node, update only a certain field without rewrite?

我的文档有一个如下所示的字段:

_source:
...
"produto_tags" : [
            {
              "id_produto_cor" : "1623153806",
              "tags" : []
            },
            {
             "id_produto_cor" : "875623985732",
             "tags": []
            },
            {...}
...

我需要在此字段上插入另一个对象而不重写整个 produto_tags

data to be inserted:
             {
             "id_produto_cor" : "312411",
             "tags": []
            },

我的最终文档将如下所示:

_source:
...
"produto_tags" : [
            {
              "id_produto_cor" : "1623153806",
              "tags" : []
            },
            {
             "id_produto_cor" : "875623985732",
             "tags": []
            },
            {
             "id_produto_cor" : "312411",
             "tags": []
            }
]

我正在使用 NODE js,我正在使用它,但它重写了我输入的内容:

 const query = { 
      doc: {
        nome_relatorio: nome_relatorio,
        produto_tags: produto_tags,
        referencia_tags: referencia_tags,
      }
    };
    return await esClient.update({
        index: indexName,
        body: query,
        id: id,
        method: 'post',
        type: typeDoc,  
    })

1.您可以使用 update_by_query api

POST <index_name>/_update_by_query
{
  "script": {
    "source": "ctx._source.produto_tags.add(params.product)",
    "params": {
      "product": {
        "product_id": "1004600287",
        "tags": []
      }
    }
  },
  "query": {
    "match_all": {} --> select the document
  }
}

2。更新 api

POST <index_name>/_update/<doc_id>
{
  "script": {
    "source": "ctx._source.produto_tags.add(params.product)",
    "lang": "painless",
    "params": {
      "product": {
        "product_id": "11",
        "tags": []
      }
    }
  }
}