当前位置: 首页 > 面试题库 >

Elasticsearch脚本:更新数组值

燕俊明
2023-03-14
问题内容

这是我的文件

{
    "name": "andrew",
    "b": [{"x":"c1", "y": 0}, {"x":"c2", "y": 0}]
}

我想在数组字段“ b”中找到元素并更新整个对象。我尝试了此脚本,但它没有更新。有任何想法吗?

{
    "script": "for (item in ctx._source.b) { if (item['x'] == x_id) { item = newobj; } };",
    "params": {
        "x_id": "c1",
        "newobj" : {"x":"c1", "y": 4222}
    },
    "lang":"groovy"
}

问题答案:

使用此代替:

{
  "script": "for (int i=0;i<ctx._source.b.size();i++) { item=ctx._source.b[i]; if (item['x'] == x_id) { ctx._source.b[i] = newobj} };",
  "params": {
    "x_id": "c1",
    "newobj": {
      "x": "c1",
      "y": 4222
    }
  },
  "lang": "groovy"
}


 类似资料:
  • 问题内容: 我有类似的文件: 我的文档可能很大(但这些字段不是很大),并且从头开始生成它们很昂贵。 有时我需要更新这些批次-因此进行 部分 更新(节省“索引客户端”的处理能力和带宽,从而节省时间)并用新值替换MyProp值将是有益的。 原始文件示例: 更新文档的示例(或更确切地说,外观): 从我所看到的,这包括脚本。 谁能用剩下的难题启发我? 赏金添加: 如果可能的话,我还想在批处理语句中提供一些

  • 问题内容: 我想在每个更新时间将一个对象添加到字段中。 例如,我有一个文档: 下次,我想在测试字段中添加一个对象并保存旧对象。结果是: 如何实现? 编辑 我使用脚本: 但是,我得到了例外: 编辑 现在,我想添加一个字段以确保更新或插入对象。例如: 当我更新字段时,当id存在时,我将更新对象。相反,我将插入对象。 问题答案: 我建议尝试这样的脚本,该脚本在参数中带有两个参数。它将检查任何嵌套对象是否

  • 问题内容: 我是ES中的新手,我想使用脚本过滤器来获得所有匹配,即数组至少具有一个小于max且大于min的元素(max和min是脚本中的param)。 该文件像: 我尝试了脚本,但没有用 没有错误信息,但是搜索结果是错误的,有没有办法迭代数组字段? 谢谢你们。 问题答案: 是的,这是可行的,但是您的脚本没有这样做。尝试改用Groovy的any()方法: 一些东西: 您的脚本只是遍历一个集合并检查条

  • 问题内容: 假设我创建了一个像这样的文档: 我可以使用GET / idx / type / 1检索文档: 现在,我想检查字段“ the_field”是否包含值2。我知道我可以使用term子句,但是我需要使用过滤器脚本检查它,因此我尝试了: 并没有结果: 为了测试我的mevl脚本语法是否正确,我尝试这样做: 并获得正确的结果: 我究竟做错了什么? 我认为doc [‘the_field’]。value

  • 我有一系列推车。我想更新请求对象中的产品数量。即。 我有一个数组的产品和数量,比如: 我想更新它们,如: 这可能的逻辑是什么?

  • 我正在使用liquibase更新数据库。 我有文件changelog-master.xml,其中包含: 在resource/src/main/resources/dbchangelog/ddl/中,我有一个带有脚本的文件MS sql: 错误: 是否可以运行典型的MS SQL脚本或liquibase会有问题?