2017-06-22 18 views
0

私は、次のドキュメントがあります:私は何をしたいか弾性検索部分更新

{ 
      { 
       "_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 
         } 
        ] 
       } 
      } 

を特定のソースファイルの状況フィールドを更新しています。

"sourceFile": "/ nfs/clients/client1/projects/project1 /"エンドポイントを使用してアップデートを実行しようとしましたが、 Readme.txt "

" sourceFiles "配列内にあるすべてのものを削除します。特定の「sourceFile」のステータスフィールドのみを更新し、他のデータはそのまま残すことができますか?私はまた、 "doc_as_upsert"オプションを使用して更新を試みましたが、それでも他のものはすべて削除されます。

UPDATE

私はちょうど走る次のスクリプトは、しかし、何も更新されていない結ば:

{ 
    "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" 
    } 
} 

ありがとう!

答えて

0

ので、スクリプトは私が望んでいたまさに行い、私は、「インライン」を使用して、それを呼び出す必要があり、最終的な作業スクリプトは次のとおりです。

{ 
    "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" 
    } 
    } 
}