我正在使用node.js中的Lambda函数在我的AWS CloudSearch域上执行搜索:
我上传了一份文件:
{
“some_field”: “bla bla“,
“some_date_field”: 1.466719E9,
"number_field”: 4,
“some_string”: "some long string blabla"
}
我执行此类搜索
var params = {
query: 'bla bla',
};
cloudsearchdomain.search(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
context.fail(err);
}
else {
context.succeed(data); // successful response
}
});
搜索工作正如文档here CloudSearch返回文档 在一个命中的字段属性中的信息。这是一个例子:
{
"status": {
"timems": 2,
"rid": “blabla”
},
"hits": {
"found": 1,
"start": 0,
"hit": [
{
"id": “452545-49B4-45C3-B94F-43524542352-454352435.6666-8532-4099-xxxx-1",
"fields": {
“some_field”: [
“bla bla“
],
“some_date_field”: [
"1.466719E9"
],
"number_field”: [
"4"
],
“some_string”: [
"some long string blabla"
],
}
}
]
}
}
如您所见,所有字段都以数组中的字符串形式返回。 无论如何都要将结果作为JSON来保存 所有字段的类型?
答案 0 :(得分:3)
向AWS提交此报告后,我收到了以下回复:
您好,这实际上是预期的行为。 SDK团队选择将“fields”属性实现为字符串键和字符串数组值的字典,以保持AWS SDK所在的各种语言的一致性。他们负责在客户端上处理各种响应格式(HTTP请求与SDK方法)。有关详细信息,请参阅:https://github.com/aws/aws-sdk-js/issues/791
不幸的是,我上面描述的问题的唯一解决方案是:
1)创建一个解析器,根据您考虑数据类型的预期响应,根据需要解析结果
2)向您的cloudsearch索引(文本类型)添加一个新字段,其中包含整个json对象/文档的字符串化版本。然后,您可以在此处使用JSON.parse()来获取JSON格式的文档。这个解决方案并不理想,因为它会在文档中添加不必要的文本块,但事实证明它是上述问题的快速解决方案。
如果有人知道,我很想知道更多的解决方案。
答案 1 :(得分:2)