亚马逊云搜索查询

Posted

技术标签:

【中文标题】亚马逊云搜索查询【英文标题】:Amazon CloudSearch query 【发布时间】:2013-01-01 01:27:42 【问题描述】:

我不知道如何从静态 html 页面查询我的 Amazon CloudSearch。尽管文档很好,但除了在浏览器中复制和粘贴 URL 之外,没有其他示例。

我想要的是 S3 中的 HTML 页面,因此不允许服务器端代码,有一个文本字段表单,当单击搜索按钮时会触发到我的 CloudSearch 端点并返回结果

CloudSearch 使用 JSON 响应,因此必须对其进行解析并制作结果表。

到目前为止,我一直在本地处理保存的 JSON 结果并使用 Jquery 读取 JSON 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>JSON Sample</title>
</head>
<body>
    <div id="placeholder"></div>
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script>
  $.getJSON('search.json', function(data) 

    var output="<ul>";
        for (var i in data.hit) 
            output+="<li>" + data.hit[i].id+ "</li>";
        

        output+="</ul>";
        document.getElementById("placeholder").innerHTML=output;

        console.log(data);
  );
    </script>
</body>
</html>

这给了我记录的 ID。

但是当我尝试将 URL 更改为 CloudSearch 端点时,我没有返回任何数据。阅读并转圈,我相信这是因为 CORS。

但是,Amazon 的文档只是说要在端点上使用 HTTP GET,但我如何将它构建到我的 HTML 页面中。

抱歉问了这么一个基本问题

【问题讨论】:

您是否配置了对搜索域的访问权限:docs.aws.amazon.com/cloudsearch/latest/developerguide/…? 嗨,伙计——是的,如果我在浏览器中使用 URL,我可以得到结果,因此访问有效。它只是如何搜索和解析来自 HTML 页面的响应。你会用吗? 请注意,当您在 AJAX 调用中从 EC2 服务器运行调用方时,调用方的 IP 是不同的。我以不同的方式使用它,因为来自 CloudSearch 的结果不是从响应本身呈现的。我用它只是为了给我返回文档(和方面)的 ID。 【参考方案1】:

这会对你有所帮助。你需要像这样创建一个 xml 配置文件。

http://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html

【讨论】:

我已将 CORS 添加到我的 S3 存储桶中,并且在 Firebug 中收到红色 200 响应,因此似乎仍然存在问题 我现在有一个 HTML 页面成功地从不同的 S3 存储桶请求 JSON 并显示结果。所以这绝对是 CloudSearch 的东西,而不是我的 S3 存储桶上的 CORS【参考方案2】:

CloudSearch 目前不支持 CORS,因此您的浏览器将不允许您联系 CloudSearch。

如果您不想运行服务器,则需要为您的请求找到代理。你可以看看这个:

Is there a free JSON proxy server which supports CORS or JSONP?

【讨论】:

【参考方案3】:

您可以制作一个包含所有搜索内容的 html 表单;只要确保它最终构建了正确的 url,例如:

http://search-YOURDOMAIN-RANDOMID.REGION.cloudsearch.amazonaws.com/2013-01-01/search?q=THESEARCHPHRASE&q.parser=simple&start=0&size=30&return=COMMA%2cSEPARATED%2cLIST_OF_FIELDS

对应的形式如下:

<form action="http://search-YOURDOMAIN-RANDOMID.YOURREGION.cloudsearch.amazonaws.com/2013-01-01/search" method="get">

   <label>Search: <input name="q" /></label>
   <input type="hidden" name="q.parser" value="simple" />

   <label>How many results? <select name="size">
      <option>10</option>
      <option>20</option>
   </select></label>

   // other dropdowns, hidden inputs etc corresponding to `start`, `return`, etc

   <button type="submit">Search</button>
</form>

如果您在确定应提交的内容方面需要帮助,请在 CloudSearch 仪表板“运行测试搜索”(https://console.aws.amazon.com/cloudsearch/home?region=YOURREGION#search,YOURDOMAIN) 上检查网络流量(Chrome > F12 > 网络选项卡)。或在http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html上阅读更多搜索网址示例

【讨论】:

【参考方案4】:

创建了一个 angularjs 项目来演示这个并添加到 git hub。您需要 CORS-anywhere 才能正确路由到域。

https://github.com/tkntobfrk/amazon-cloudsearch-angular

项目使用建议器来搜索域数据并使用自动完成数据填充输入字段。使用 bootstrap.ui 预输入。

【讨论】:

【参考方案5】:

要对 cloudsearch API 启用 CORS,您可以使用 AWS API Gateway HTTPProxy 来前端您的 cloudsearch 端点。

AWS API Gateway 允许您启用 CORS。

对于我的配置,我在定义端点时为这些字段添加了 Passthrough: 开始,排序,q.options,q.parser,return,fq,q,size

您可以像这样映射每个参数:

method.request.querystring.start
method.request.querystring.sort
method.request.querystring.q.options
etc.

【讨论】:

以上是关于亚马逊云搜索查询的主要内容,如果未能解决你的问题,请参考以下文章

亚马逊中国云计算服务器20亿出售,预示退出中国市场吗?

你好,请问亚马逊店铺的远程服务器连接怎么用?

阿里云服务器和亚马逊服务器哪个好用?

AWS 亚马逊和Aliyun阿里云的区别比较和深度分析

从亚马逊(AWS)迁移到阿里云

互联网时代云平台百花齐放,亚马逊云科技独树一帜