elasticsearch,kibana,elastic-stack,Javascript,Node.js,elasticsearch,Kibana,Elastic Stack" /> elasticsearch,kibana,elastic-stack,Javascript,Node.js,elasticsearch,Kibana,Elastic Stack" />

Javascript 弹性搜索删除源上字段内的单个元素

Javascript 弹性搜索删除源上字段内的单个元素,javascript,node.js,elasticsearch,kibana,elastic-stack,Javascript,Node.js,elasticsearch,Kibana,Elastic Stack,我试图删除弹性字段current字段中的一个元素,我有一个数据结构: 我需要在我的节点应用程序中从produto_标记中删除一个元素,以获取id_produto_cor, 例如: { "_index" : "relatorio_recebimento_produto_hml", "_type" : "_doc", "_id" : "54XZ9HAB4DHa2O1nQlpk", "_score" : 1.0, "_

我试图删除弹性字段current字段中的一个元素,我有一个数据结构:

我需要在我的节点应用程序中从produto_标记中删除一个元素,以获取id_produto_cor, 例如:

  {
        "_index" : "relatorio_recebimento_produto_hml",
        "_type" : "_doc",
        "_id" : "54XZ9HAB4DHa2O1nQlpk",
        "_score" : 1.0,
        "_source" : {
          "id_usuario" : 1408,
          "data_criacao" : "2020-03-19T22:10:40.465Z",
          "produto_tags" : [
            {
              "id_produto_cor" : "2489664268",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "1000045010",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "1004600287",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "1032013410",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "2468436987",
              "tags" : [ ]
            }
          ],
          "referencia_tags" : [ ],
          "nome_relatorio" : "teste"
        }
      }
我希望我的数据如下:

       "_index" : "relatorio_recebimento_produto_hml",
       "_type" : "_doc",
       "_id" : "xYVD5XAB4DHa2O1ndFo1",
       "_score" : 1.0,
       "_source" : {
         "id_usuario" : 1376,
         "data_criacao" : "2020-03-16T21:32:46.369Z",
         "produto_tags" : [
            {
              "id_produto_cor" : "1000045010",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "1004600287",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "1032013410",
              "tags" : [ ]
            },
            {
              "id_produto_cor" : "2468436987",
              "tags" : [ ]
            }
          ],
         "referencia_tags" : { },
         "nome_relatorio" : "teste"
       }
     },
...
这是我的最终结构 zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 你可以使用

查询更改的结构: 遍历produto_标记,与特定值匹配,并将匹配的对象存储在数组列表中。然后遍历列表并从produto_标记中删除对象

POST /<index_name>/_update_by_query
{
  "script":{
    "source":"if(ctx._source.produto_tags.size()==0) {return;} def list=[]; for(product in ctx._source.produto_tags) { if (product['id_produto_cor'] ==params.product_id){list.add(product)}} if(list.size()==0) return; for(d in list){ctx._source.produto_tags.remove(ctx._source.produto_tags.indexOf(d))}",
    "params" : {
            "product_id" : "2468436987"
        }

  },
  "query":{
    "match_all":{} --> to select specific documents
  }
}
你可以用

查询更改的结构: 遍历produto_标记,与特定值匹配,并将匹配的对象存储在数组列表中。然后遍历列表并从produto_标记中删除对象

POST /<index_name>/_update_by_query
{
  "script":{
    "source":"if(ctx._source.produto_tags.size()==0) {return;} def list=[]; for(product in ctx._source.produto_tags) { if (product['id_produto_cor'] ==params.product_id){list.add(product)}} if(list.size()==0) return; for(d in list){ctx._source.produto_tags.remove(ctx._source.produto_tags.indexOf(d))}",
    "params" : {
            "product_id" : "2468436987"
        }

  },
  "query":{
    "match_all":{} --> to select specific documents
  }
}

如果没有需要删除的值,您不能更新文档吗?您可以添加实际结果和预期结果吗?我可能可以更新此文档的整个字段,例如:produto_标记:[1,2,3],然后我更改为[2,3],但是我只想删除一个元素,而不是整个字段。如果没有需要删除的值,您不能更新文档吗?您可以添加实际结果和预期结果吗?我可能可以更新此文档的整个字段,例如:produto_tags:[1,2,3],然后我更改为[2,3],但是我只想删除一个元素而不是整个字段对不起,我的结构改变了,正如你所看到的,produto_标记:[{id_produto_cor:2489664268,tags:[],我试着做一些类似的事情:script:{source:ctx.\u source.produto_tags.id_produto_cor.remove'2489664268'},但我的回答是:script_stack:[ctx.\u source.produto_tags.id_produto_cor.remove'2489664268',^--HERE],@GabrielValensuela我已经更新了新结构的答案抱歉,我的结构已更改,正如您所看到的,produto_标记:[{id_produto_cor:2489664268,tags:[]},我尝试执行如下操作:script:{source:ctx.\u source.produto_tags.id_produto_cor.remove'2489664268',但我的响应是:script_stack:[ctx.\u source.produto\u tags.id\u produto\u cor.删除'2489664268',^--HERE],@GabrielValensuela我已经更新了新结构的答案
POST /<index_name>/_update_by_query
{
  "script":{
    "source":"if(ctx._source.produto_tags.size()==0) {return;} def list=[]; for(product in ctx._source.produto_tags) { if (product['id_produto_cor'] ==params.product_id){list.add(product)}} if(list.size()==0) return; for(d in list){ctx._source.produto_tags.remove(ctx._source.produto_tags.indexOf(d))}",
    "params" : {
            "product_id" : "2468436987"
        }

  },
  "query":{
    "match_all":{} --> to select specific documents
  }
}