gpt4 book ai didi

elasticsearch - Elasticsearch 部分更新嵌套文档

转载 作者:行者123 更新时间:2023-12-03 01:45:01 26 4
gpt4 key购买 nike

我有以下文件:

{
{
"_index": "demo_processinglog",
"_type": "status",
"_id": "1498130124024a",
"_score": 1,
"_source": {
"startTime": 1411230604024,
"clientName": "fastlog",
"projectName": "demo",
"sourcePath": "/nfs/clients/client1/projects/project1/",
"sourceFiles": [
{
"sourceFile": "/nfs/clients/client1/projects/project1/Readme.txt",
"fileSize": 3563
"status": "123"
},
{
"sourceFile": "/nfs/clients/client1/projects/project1/XML/data.xml",
"fileSize": 51893940,
"status": 234
},
{
"sourceFile": "/nfs/clients/client1/projects/project1/XML/data2.xml",
"fileSize": 1665,
"status": 345
},
{
"sourceFile": "/nfs/clients/client1/projects/project1/XML/data3.xml",
"fileSize": 5799680,
"status": 456
}
]
}
}

我想要做的是更新特定源文件的状态字段。我尝试使用“_update”端点进行更新,但是如果我尝试仅更新源文件的“状态”字段:

“源文件”:“/nfs/clients/client1/projects/project1/Readme.txt”

它会删除“sourceFiles”数组中的所有其他内容。如何仅更新特定“sourceFile”的状态字段并保持其他数据不变?我还尝试使用“doc_as_upsert”选项进行更新,但它仍然会删除其他所有内容。

更新

我刚刚绑定(bind)了以下脚本,该脚本运行,但没有任何更新:
{
"script": "for ( int i = 0; i < ctx._source.sourceFiles.size(); i ++ ) {if ( ctx._source.sourceFiles[ i ].fileName == params.sourceFile) {ctx._source.sourceFiles[ i ].status = params.status;} }",
"lang": "painless",
"params": {
"status": "completed",
"sourceFile": "/nfs/clients/client1/projects/project1/Readme.txt"
}
}

谢谢!

最佳答案

所以,脚本完全符合我的要求,我只需要使用“内联”来调用它,所以最终的工作脚本是:

{
"script":{
"inline": "for ( int i = 0; i < ctx._source.sourceFiles.size(); i ++ ) {if ( ctx._source.sourceFiles[ i ].fileName == params.sourceFile) {ctx._source.sourceFiles[ i ].status = params.status;} }",
"lang": "painless",
"params": {
"status": "completed",
"sourceFile": "/nfs/clients/client1/projects/project1/Readme.txt"
}
}
}

关于elasticsearch - Elasticsearch 部分更新嵌套文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44698452/

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