ドキュメント内のフィールドを配列で更新しようとしています。フィールド「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
}
誰が私が間違っているのか知っていますか?
「START_OBJECTでテキストを取得できません」というメッセージは、Elasticsearchが「string」タイプのエントリを予期していたが、入力としてオブジェクトを与えようとしていることを意味します。
Kibanaをチェックすると、フィールド「products」がそこに存在し、文字列として定義されていることがわかります。ただし、辞書のリストを入力しているので、フィールド「製品」は最初からオブジェクトとして定義されている必要があります(動的フィールドが含まれていることが望ましい)。例は、 https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html にある完全な例を参照してください)
"products": {
"dynamic": true,
"properties": {}
}
ただし、すでにインデックスがあるため、マッピングを変更できないため、インデックスを削除し、事前にマッピングを行ってから更新を行う必要があります。