Cloudsearch和API Gateway结构化查询短语搜索

时间:2017-11-24 21:22:50

标签: json amazon-web-services aws-api-gateway urlencode amazon-cloudsearch

我正在将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 部分

,则有效

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您正在使用库来执行AJAX请求(例如Axios,jQuery),那么在发送请求之前,您可能不需要对该字符串进行URI编码。我在我的应用中使用了以下过滤器查询(这与您的查询的语法非常相似),并且在没有encodeURIComponent的情况下工作正常:

fq: '(term field=search_type_lit \'Suggestion\')'

如果在使用AJAX库(可能会为您提供编码)之前对该字符串进行编码,则会对其进行双重编码,CloudSearch不会将其识别为有效的查询语法。

只是为了说明一下,如果它由encodeURIComponent编码一次然后再由你的AJAX库编码一次,那么单独的等号可能会发生什么。

  • 未编码:=
  • 编码一次:%3D
  • 编码两次:%253D