AWS CloudSearch: значение [fieldname] не может быть массивом JSON или объектом
У меня возникла эта проблема с полем типа int-array. Использование aws-sdk для Node.js, я отправляю документ через домен CloudSearchDomain.метод uploadDocuments () . JSON для документа (в переменной searchContent ) создается в процессе узла, затем я использую:
var params = {
contentType: 'application/json',
documents: JSON.stringify([searchContent])
};
csd.uploadDocuments(params, function(err, data){
...(callback process)...
});
Нестроковый объект searchContent выглядит следующим образом:
{ id: 1,
type: 'Product',
hash_type_id: 'Product-1',
name: 'Test product',
description: 'A test product',
category: [ 2 ],
content: '<some text here>',
state: [ 1 ],
hash_all: '<some text>'
}
И строчится так:
[{"id":1,"type":"Product","hash_type_id":"Product-1","name":"Test product","description":"A test product","content":" <some text>","category":[2],"state":[1],"hash_all":"<some text>"}]
Ошибка, которую я получаю:
{
"message": "{ ["The value of category cannot be a JSON array or object"] }",
"code": "DocumentServiceException",
"time": "2014-11-20T01:24:27.499Z",
"statusCode": 400,
"retryable": false
}
Как как уже упоминалось, поле category имеет тип int-array. С чего бы мне получать это сообщение?
UPDATE: я также пытался использовать типизированный массив (Int16Array) для поля category, с точно таким же результатом.
1 ответ:
Документ должен быть завернут в параметры пакетной обработки. В пакете каждый документ должен иметь следующий формат:
{ type: "add|update|delete", id: "Unique ID", fields: Document JSON here }
И это должно быть в массиве, даже если это всего лишь один документ. Таким образом, JSON для документа в вопросе становится:
{ type: "add", id: "Product-1", fields: { id: 1, type: 'Product', hash_type_id: 'Product-1', name: 'Test product', description: 'A test product', category: [ 2 ], content: '<some text here>', state: [ 1 ], hash_all: '<some text>' } }