我和Elasticsearch一起工作了好几天了。当我创建一个CRUD时,我遇到了updateByQuery法。我正在使用nestjs,我更新字段的方式是:
await this.elasticSearch.updateByQuery(
{
index: 'my_index_user',
body:{
query:{
match:{
name: 'user_name',
}
},
script: {
inline : 'ctx._source.name = "new_user_name"'
}
}
}
);我的问题是:为什么elasticsearch需要这个语法'ctx._source.name = "new_user_name"'来指定字段名称的新值?这个上下文是什么ctx._source?
发布于 2022-03-08 01:12:11
正如在信源过滤官方文件中提到的,使用它,您可以在_source中获取字段值(发送给Elasticsearch的值,这个值是按原样存储的,不需要经过分析过程)。
让我们以一个应用了text分析器(默认)的standard字段为例,在这个字段中存储foo bar的值,Elasticsearch在分析过程中破坏字段的值,foo和bar两个标记存储在Elasticsearch的倒排索引中,但是如果您想查看原始值(即foo bar ),您可以检查_source并得到它。
因此,最好将原始值(没有分析过程)放在_source中,因此使用这个API,您将在那里更新字段值。当您希望稍后将索引重新索引到新索引或更改其分析方式时,也会有所帮助,因为您在_source中有原始值。
https://stackoverflow.com/questions/71386820
复制相似问题