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

时间:2016-06-29 18:39:24

标签: javascript node.js amazon-web-services 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"
         }

我执行此类搜索

   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来保存 所有字段的类型?

2 个答案:

答案 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)

CloudSearch 保留字段类型;结果意味着您已将这些字段配置为数组。

您可以通过在AWS Web控制台上转到域的索引选项来确认这一点。您应该会看到text-arrayliteral-array等字段,如下面的屏幕截图所示。这些将作为数组返回。如果您只为每个文档中的每个字段提交单个值,则可以将它们更改为非数组类型,并且您将获得非数组值。 indexing options