2017-01-26 12 views
1

文書のフィールドを配列で更新しようとしています。フィールド "products"に配列を追加したいと思います。私はこれを試してみました:エラスティックサーチでネストされた配列のフィールドを更新する

POST /index/type/1/_update 
{ 
    "doc" :{ 
     "products": [ 
     { 
      "name": "A", 
      "count": 1 
     }, 
     { 
      "name": "B", 
      "count": 2 
     }, 
     { 
      "name": "c", 
      "count": 3 
     } 
     ] 
    } 
} 

これは私がしようとすると、コードを実行したとき、私は取得していますエラー応答である:

{ 
    "error": { 
     "root_cause": [ 
     { 
      "type": "mapper_parsing_exception", 
      "reason": "failed to parse [products]" 
     } 
     ], 
     "type": "mapper_parsing_exception", 
     "reason": "failed to parse [products]", 
     "caused_by": { 
     "type": "illegal_state_exception", 
     "reason": "Can't get text on a START_OBJECT at 1:2073" 
     } 
    }, 
    "status": 400 
} 

誰もが私が間違っているのか知っていますか?

答えて

3

「START_OBJECTでテキストを取得できません」というメッセージは、Elasticsearchがタイプ「string」のエントリを期待していたが、オブジェクトを入力として取得しようとしていることを示しています。

キバナをチェックすると、フィールド「products」がそこに存在し、文字列として定義されていることがわかります。しかし、辞書のリストを入力しているので、フィールド "products"は最初からオブジェクトとして定義されているはずです(できれば動的フィールドがある)。例では、すでにインデックスを持っているのでやる、あなたは、インデックスを削除する必要がありますので、あなたは、マッピングを変更することはできません事前にマッピングを行う。しかし

"products": { 
     "dynamic": true, 
     "properties": {} 
    } 

https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.htmlで完全な例を参照)になります更新。

関連する問題