elasticsearch 基于现有文档值的elasticsearch脚本更新,elasticsearch,lucene,kibana,elasticsearch,Lucene,Kibana" /> elasticsearch 基于现有文档值的elasticsearch脚本更新,elasticsearch,lucene,kibana,elasticsearch,Lucene,Kibana" />

elasticsearch 基于现有文档值的elasticsearch脚本更新

elasticsearch 基于现有文档值的elasticsearch脚本更新,elasticsearch,lucene,kibana,elasticsearch,Lucene,Kibana,从文档中我了解到,使用\u searchAPI上的脚本搜索文档很容易,例如,在这里,我可以在创建脚本条件时使用现有的文档值 GET /_search { "query": { "bool" : { "must" : { "script" : { "script" : { "source": "doc['num1'].value &

从文档中我了解到,使用
\u search
API上的脚本搜索文档很容易,例如,在这里,我可以在创建脚本条件时使用现有的文档值

GET /_search
{
    "query": {
        "bool" : {
            "must" : {
                "script" : {
                    "script" : {
                        "source": "doc['num1'].value > 1",
                        "lang": "painless"
                     }
                }
            }
        }
    }
}
要使用
updateapi
更新文档,我们可以这样做

POST test/_doc/1/_update
{
    "script" : "ctx._source.new_field = 'value_of_new_field'"
}
我所期望的是在ES查询中可能出现这种情况?(我尝试过,但没有成功

为什么我需要?实际上,我的文档上有两个字段。一个称为
图像
,具有多个值,例如[“1.jpg”、“2.jpg”、“3.png”,另一个称为
图像计数
,基于
图像
字段的长度,具有3。在这里,我可以在使用
\u搜索
API时获得
图像
字段的长度

  • 但我只想知道ES上有没有我可以使用的设施 通过动态计算
    图像
    长度并设置
    image\u count
    字段的值
  • 是否有任何批量更新API可以轻松完成该任务而无需 在
    \u update
    API上指定每个文档id

  • 您正在寻找的是“按查询API更新”。如果要更新大量文档,请小心,可以使用切片滚动方法。 这是最新版本,可能需要根据您的版本进行调整

    POST /images_index/_update_by_query
    {
        "script":{
            "source": "ctx._source['images_count'] = ctx._source['images'].length"
        }
    }
    
    请参见此处获取文档:

    POST /images_index/_update_by_query
    {
        "script":{
            "source": "ctx._source['images_count'] = ctx._source['images'].length"
        }
    }