【问题标题】:AWS CloudSearch - Getting results of a search in JSON formatAWS CloudSearch - 以 JSON 格式获取搜索结果
【发布时间】:2016-06-29 18:39:23
【问题描述】:

我正在从 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 来保留 所有字段的类型?

【问题讨论】:

  • @alexroussos - 认为你现在可能会找到答案,所以标记你

标签: javascript node.js amazon-web-services amazon-cloudsearch


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 这很奇怪。感谢发帖!
【解决方案2】:

CloudSearch 确实保留字段类型;结果表明您已将这些字段配置为数组。

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

【讨论】:

  • 谢谢,但在我的问题中似乎并非如此,因为我的字段配置正确。就我而言,我在索引配置中仅使用横向、整数和文本数据类型。然而这些仍然以数组的形式返回..
  • 我刚刚确认行为与我描述的一样(忽略在我的示例中author 未启用返回的事实;我检查了其他数组与可返回的非数组字段)。我想不出任何可能的原因,它对你的行为会有所不同。您使用的是 2013-01-01 版本的 CloudSearch 吗?您是否尝试过通过 curl 或浏览器直接查询 CloudSearch 以获取原始结果,而不是通过库?
  • 我正在使用最新的 cloudsearch javascript SDK。如果我在 cloudsearch 控制台中进行搜索并查看原始 JSON,那么它与预期的一样,但是当我按照我的描述通过 javascript SDK 进行搜索时,我遇到了数组问题。这很可能是 javascript SDK 中的一个错误。您是使用 SDK 还是 curl 进行测试的?
  • 我没有设置 js sdk,但是听起来好像有错误。与 curl 一起使用
  • 谢谢。我向 AWS 提交了有关此问题的错误报告。
猜你喜欢
  • 2014-07-23
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 2013-10-02
相关资源
最近更新 更多