gpt4 book ai didi

json - 如何使用 _update_by_query 将 json 对象添加到弹性索引中的多个文档?

转载 作者:行者123 更新时间:2023-11-29 02:54:54 32 4
gpt4 key购买 nike

我需要更新我的 Elasticsearch 索引中的几个文档,我使用 _update_by_query 插件尝试了以下操作。

我需要做的是在现有的几个符合特定条件的文档中添加一个新的字段。新字段是嵌套的 JSON。所以添加后文档源应该是这样的

_source: {
...existing fields,
"new_field" : {
"attrName1" : "value",
"attrName2" : "value",
}
}

我尝试使用 _update_by_query API 来完成这项工作。但到目前为止,我只能用它添加字符串字段和数组。尝试使用以下查询添加 JSON 时出现错误。

查询

curl -XPOST "http://xxx.xxx.xxx.xxx:pppp/my_index_name/_update_by_query" -d'
{
"query": {
"bool": {
"must": [
{
"term": {
"team.keyword": "search_phrase"
}
}
]
}
},
"script" : {
"inline":"ctx._source.field_name = {\"a\":\"b\"}"
}
}'

错误

{
"error": {
"root_cause": [
{
"type": "script_exception",
"reason": "compile error",
"script_stack": [
"ctx._source.field_name = {\"a\":\"b\"}",
" ^---- HERE"
],
"script": "ctx._source.field_name = {\"a\":\"b\"}",
"lang": "painless"
}
],
"type": "script_exception",
"reason": "compile error",
"caused_by": {
"type": "illegal_argument_exception",
"reason": "invalid sequence of tokens near ['{'].",
"caused_by": {
"type": "no_viable_alt_exception",
"reason": null
}
},
"script_stack": [
"ctx._source.field_name = {\"a\":\"b\"}",
" ^---- HERE"
],
"script": "ctx._source.field_name = {\"a\":\"b\"}",
"lang": "painless"
},
"status": 500
}

到目前为止,我只能将字符串添加为新字段。实现这一目标的正确方法是什么?

最佳答案

不是直接赋值,而是使用参数来实现相同的目的。

{
"query": {
"bool": {
"must": [
{
"term": {
"team.keyword": "search_phrase"
}
}
]
}
},
"script": {
"inline": "ctx._source.field_name = params.new_field",
"params": {
"new_field": {
"a": "b"
}
}
}
}

关于json - 如何使用 _update_by_query 将 json 对象添加到弹性索引中的多个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46927871/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com