AWS CloudSearch - 以 JSON 格式获取搜索结果
AWS CloudSearch - Getting results of a search in JSON format
我正在 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 returns 文档
点击字段 属性 中的信息。这是一个例子:
{
"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 保留
所有字段的类型?
CloudSearch 保留字段类型;结果表明您已将这些字段配置为数组。
您可以通过在 AWS Web 控制台上转到您的域的索引选项来确认这一点。您应该看到 text-array
、literal-array
等字段,如下面的屏幕截图所示。这些将作为数组返回。如果您只为每个文档中的每个字段提交一个值并且您将取回非数组值,则可以将它们更改为非数组类型。
在向 AWS 提交有关此问题的报告后,我收到了回复:
您好,这实际上是预期的行为。开发工具包团队选择将 "fields" 属性 作为字符串键和字符串数组值的字典来实现,以保持 AWS 开发工具包所使用的各种语言的一致性。他们将处理各种响应格式(HTTP 请求与 SDK 方法)的责任放在客户端上。详情请见:https://github.com/aws/aws-sdk-js/issues/791
不幸的是,我上面描述的问题目前唯一的解决方案是:
1) 创建一个解析器,该解析器将根据您的预期响应(考虑到您的数据类型)根据需要解析结果
2) 向您的云搜索索引(文本类型)添加一个新字段,其中包含整个 json object/document 的字符串化版本。然后,您可以只使用 JSON.parse() 来获取 JSON 格式的文档。此解决方案并不理想,因为它会在您的文档中添加不必要的文本块,但事实证明它可以快速解决我的上述问题。
如果有人知道的话,我很乐意听到更多解决方案。
我正在 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 returns 文档 点击字段 属性 中的信息。这是一个例子:
{
"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 保留 所有字段的类型?
CloudSearch 保留字段类型;结果表明您已将这些字段配置为数组。
您可以通过在 AWS Web 控制台上转到您的域的索引选项来确认这一点。您应该看到 text-array
、literal-array
等字段,如下面的屏幕截图所示。这些将作为数组返回。如果您只为每个文档中的每个字段提交一个值并且您将取回非数组值,则可以将它们更改为非数组类型。
在向 AWS 提交有关此问题的报告后,我收到了回复:
您好,这实际上是预期的行为。开发工具包团队选择将 "fields" 属性 作为字符串键和字符串数组值的字典来实现,以保持 AWS 开发工具包所使用的各种语言的一致性。他们将处理各种响应格式(HTTP 请求与 SDK 方法)的责任放在客户端上。详情请见:https://github.com/aws/aws-sdk-js/issues/791
不幸的是,我上面描述的问题目前唯一的解决方案是:
1) 创建一个解析器,该解析器将根据您的预期响应(考虑到您的数据类型)根据需要解析结果
2) 向您的云搜索索引(文本类型)添加一个新字段,其中包含整个 json object/document 的字符串化版本。然后,您可以只使用 JSON.parse() 来获取 JSON 格式的文档。此解决方案并不理想,因为它会在您的文档中添加不必要的文本块,但事实证明它可以快速解决我的上述问题。
如果有人知道的话,我很乐意听到更多解决方案。