2017-03-23 6 views
0

私はこの形式で文書を持っている:Update_by_queryを使用してelasticsearch 2.4.1の特定のフィールドを更新または削除することはできますか?

"universities": { 
         "number": 1, 
         "state": [ 
         { 
          "Name": "michigan", 
          "country": "us", 
          "code": 5696 
         },       
         { 
          "Name": "seatle", 
          "country": "us", 
          "code": 5695 
         } 
         ] 
        } 

私は、インデックス内のすべてのドキュメントにseatleデンマークの「名前」フィールドを更新する必要がありますか?

update_by_queryを使用することは可能ですか?

私はupdate_by_queryを使って試しましたが、Seatleだけを更新するのではなく、すべての名前フィールドを更新しています。 同様に、seatleがステート配列に存在する特定の「名前」フィールドを削除する方法はありますか?

私はそれはのようなエラーがスローされ

"script": { 
    "inline": "ctx._source.universities.state.remove{ it.Name== findName}", 
    "params": { 
     "findName": "seatle" 
    } 
    } 
} 

を使用して特定のフィールドを削除しようとした:あなたはこのようにそれを行うことができます

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "invalid_type_name_exception", 
     "reason": "Document mapping type name can't start with '_'" 
     } 
    ], 
    "type": "invalid_type_name_exception", 
    "reason": "Document mapping type name can't start with '_'" 
    }, 
    "status": 400 
} 

答えて

0

"script": { 
    "inline": "ctx._source.universities.state.findAll{ it.Name == findName}.each{it.Name = newName}", 
    "params": { 
     "findName": "seatle", 
     "newName": "Denmark" 
    } 
    } 
} 

まず我々はイテレートリストを作成し、必要な名前を持つすべての要素を見つけ、フィルタリングされたリストを繰り返してupdat新しい名前の要素

+0

'it.name'を' it.Name'に変更しなければならないと思います。だから私はあなたの答えを受け入れることができる – Seeker

+0

私は大文字の 'N'を逃した、それを修正した – Val

+0

それは私も特定のフィールドを削除するために適用する必要があります同じ方法ですか? – Seeker

関連する問題