2017-01-26 3 views
1

Я пытаюсь обновить поле в документе массивом. Я хочу добавить массив в поле «продукты». Я попытался это:Обновление поля с вложенным массивом в Elastic Search

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 ожидал запись типа «строка», но вы пытаетесь дать объект в качестве ввода.

Если вы проверяете Kibana, вы обнаружите, что поле "products" существует там и определяется как строка. Но так как вы вводите список словарей, тогда поле «продукты» должно быть определено с самого начала как объект (желательно с динамическими полями в нем). Пример может быть (см полного примера на https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic.html)

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

Однако, поскольку у вас уже есть индекс, то вы не можете изменить отображение, так что вам нужно будет удалить индекс, сделать отображение заранее, а затем сделать Обновить.

Смежные вопросы