AWS CloudSearch - 以JSON格式获取搜索结果

Zig*_*rth 5 javascript amazon-web-services node.js amazon-cloudsearch

我正在从node.js中的Lambda函数在我的AWS CloudSearch域上执行搜索:

我上传了一个这样的文件:

         {
               “some_field”: “bla bla“,
               “some_date_field”: 1.466719E9,
               "number_field”: 4,
               “some_string”: "some long string blabla"
         }
Run Code Online (Sandbox Code Playgroud)

我执行这样的搜索

   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
      }    

    });
Run Code Online (Sandbox Code Playgroud)

搜索工作正如此处所述, 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"
                   ],
             }
      }
   ]
 }
 }
Run Code Online (Sandbox Code Playgroud)

如您所见,所有字段都以数组中的字符串形式返回. 反正是否有结果作为JSON保留所有字段的类型?

Zig*_*rth 4

在向 AWS 提交有关此问题的报告后,我收到了以下回复:

您好,这实际上是预期的行为。开发工具包团队选择将“fields”属性实现为字符串键和字符串数组值的字典,以保持 AWS 开发工具包所在的各种语言之间的一致性。他们将处理各种响应格式(HTTP 请求与 SDK 方法)的责任放在客户端上。有关更多详细信息,请参阅:https ://github.com/aws/aws-sdk-js/issues/791

不幸的是,目前解决我上面描述的问题的唯一方法是:

1)创建一个解析器,它将根据您的预期响应(考虑您的数据类型)根据需要解析结果

2) 向您的 cloudsearch 索引(文本类型)添加一个新字段,其中包含整个 json 对象/文档的字符串化版本。然后,您可以使用 JSON.parse() 来获取 JSON 格式的文档。这个解决方案并不理想,因为它在文档中添加了不必要的文本块,但事实证明它是解决我上述问题的快速解决方案。

如果有人知道的话,我很想听到更多的解决方案。