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
部分。
我在索引中添加了现有字段 (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
部分。