我遇到了类型为int-array的字段的问题。使用aws-sdk for 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类型。为什么我会收到这条消息?
更新:我还尝试使用类型字段(Int16Array)作为类别字段,结果完全相同。
答案 0 :(得分:6)
文档需要包含在批处理参数中。在批处理中,每个文档都需要具有以下格式:
{
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>'
}
}