亚马逊云搜索查询
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.
【讨论】:
以上是关于亚马逊云搜索查询的主要内容,如果未能解决你的问题,请参考以下文章