我遇到了Cloudsearch和AWS API Gateway的问题。我有一个Cloudsearch域名,其中包含奶酪的详细信息(不要问;-)),只要查询为Simple
,我就可以使用测试搜索控制台和我的API网关查询奶酪:
q=feta&q.parser=simple&q.options={"fields":["cheeseid"]}
如果它是Structured
,我可以通过控制台执行相同操作,如下所示:
q=(and cheeseid:'feta')&q.parser=structured
但是相同的查询无法通过API网关工作。例如,此查询(通过基于浏览器的应用程序):
q=(and+cheeseid%3A%27feta%27)&q.parser=structured
虽然在URL解码时完全相同,但不会返回任何结果。
有趣的是,通过控制台输出的原始搜索结果包含:
q=(and+cheeseid%3A'feta')&q.parser=structured
这让我觉得'
不应该编码,但我不知道如何实现这个,因为我尝试在没有处理的情况下传递原始字符串并且遇到了相同的结果。
如果有人能指出我正确的方向,我会非常感激,因为我在这里碰到一堵砖墙,试图找到我的奶酪!
答案 0 :(得分:1)
您的查询的URL编码版本不正确。括号字符()也需要编码。假设这是作为查询字符串传递的,那么编码的URL应如下所示:
q=%28and+cheeseid%3A%27feta%27%29&q.parser=structured
如果这不起作用,请通过API网关控制台中的测试调用测试您的方法并发布完整的调试输出。