update_by_query 用于多字段

update_by_query for multi field

我在索引中添加了现有字段 (response) 的新 multi field (raw)。并且由于新的多字段 raw 将没有数据。我尝试从源添加数据,如下所示。

POST /y_metrics/response/_update_by_query
{
  "script":{
    "inline":  "ctx._source.response['raw'] = ctx._source.response;"
  },
  "query": {
        "match_all": {}
    }
}

失败:

 "type": "missing_property_exception",
 "reason": "No such property: raw for class: java.lang.String"

第二次尝试:

POST /y_metrics/response/_update_by_query
{
  "script":{
    "inline":  "ctx._source['response.raw'] = ctx._source.response;"
  },
  "query": {
        "match_all": {}
    }
}

失败:

    "type": "mapper_parsing_exception",
    "reason": "Field name [response.raw] cannot contain '.'"

看来,问题似乎是因为“.”。但是在这种情况下,还有什么方法可以访问 multi field 呢?我阅读了 de_dot 过滤器,它对我的​​情况有帮助吗?

如果您将一个字段添加到现有字段(因此是一个多字段),则无需使用脚本,只需重建索引,Elasticsearch 将处理其余部分。您可以通过查询调用删除更新的 script 部分。