2016-09-07 3 views
0

以下は弾性検索の要求です。オブジェクトマッピングエラーgroovyスクリプトからJsonを弾性検索の配列タイプに追加するとき

post sample/item_type/1/_update 
{ 
"script" : { 
    "file" : "my_script", 
    "params" : { 
     "slice_id" : 2, 
     "hash" : "xyjjz" 
    } 
}, 
"upsert" : { 
    "item_body" : { 
     "name" : "dummy" 
    }, 
    "attributes" : { 
     "name" : "attributes" 
    }, 
    "versions": [ 
     { 
      "version_id" : 1, 
      "begin_slice_id" : 1, 
      "end_slice_id" : 1, 
      "hash" : "xyz", 
      "count" : 1 
     } 
    ], 
    "version_count" : 1 
} 

以下は、私が上記のリクエストで使用したgroovyスクリプトです。以下は

import groovy.json.JsonBuilder 

Integer versionCount = ctx._source.version_count; 
if (ctx._source.versions[versionCount-1].hash == hash) 
{ 
    ctx._source.versions[versionCount-1].end_slice_id = slice_id; 
    ctx._source.versions[versionCount-1].count++; 
} 
else 
{ 
    def json = new JsonBuilder() 
    def root = json{ 
     "name" : "wh" 
    } 
    ctx._source.versions+=root.toString(); 
    ctx._source.version_count += 1; 
} 

私は問題を理解

{ 
    "error": { 
    "root_cause": [ 
    { 
     "type": "mapper_parsing_exception", 
     "reason": "object mapping for [versions] tried to parse field [null] as object, but found a concrete value" 
    } 
    ], 
    "type": "mapper_parsing_exception", 
    "reason": "object mapping for [versions] tried to parse field [null] as object, but found a concrete value" 
    }, 
    "status": 400 

を取得していますエラーで、バージョンの配列は、異なるタイプのオブジェクトを挿入なっています。最初はクエリ本体から直接、次にgroovyスクリプトからは次のようになります。しかし、どのようにして、JsonをGroovyから挿入して、弾性検索をしなくてもマッピングについて不平を言います。前もって感謝します。

答えて

0

これを試してみてください:

else 
{ 
    def json = new JsonBuilder() 
    def root = json name:"wh" 
    ctx._source.versions+=json.content; 
    ctx._source.version_count += 1; 
} 
関連する問題