我正在将Amazon Cloudsearch与API Gateway集成。除非我尝试进行结构化查询短语搜索,否则一切正常。
我在Cloudsearch测试搜索中使用这种语法:(短语字段=标题'搜索')并且效果很好。我看看他们的JSON,他们就这样发送:
CloudSearchAPI /搜索Q =(短语+字段%3Dcontent + '搜索')及?q.parser =结构化
我的API与Cloudsearch http端点集成以匹配该格式但是当我尝试执行完全相同的查询时,我收到以下错误
APIURL /(短语+字段%3Dcontent + '搜索')及q.parser%3Dstructured
[不推荐使用:使用外部消息字段]
就好像“=”符号在发送到cloudsearch端点之前被解码。有没有人知道如何克服这个问题?
另外,我使用javascript发送AJAX请求。以下是我对短语搜索的编码方式:
encodeURIComponent("(phrase field=content '" + term + "')") //turns in to: phrase%20field%3Dcontent%20'search'
如果我不包含 field = content 部分
,则有效谢谢!
答案 0 :(得分:0)
如果您正在使用库来执行AJAX请求(例如Axios,jQuery),那么在发送请求之前,您可能不需要对该字符串进行URI编码。我在我的应用中使用了以下过滤器查询(这与您的查询的语法非常相似),并且在没有encodeURIComponent
的情况下工作正常:
fq: '(term field=search_type_lit \'Suggestion\')'
如果在使用AJAX库(可能会为您提供编码)之前对该字符串进行编码,则会对其进行双重编码,CloudSearch不会将其识别为有效的查询语法。
只是为了说明一下,如果它由encodeURIComponent
编码一次然后再由你的AJAX库编码一次,那么单独的等号可能会发生什么。
=
%3D
%253D