如何编码php数组到亚马逊CloudSearch过滤器查询


How to encode php array to Amazon CloudSearch filterquery

我有一个字段数组&我希望使用一个或两个'and'或'or'操作符作为filterQuery参数传递给Amazon CloudSearchDomain的值。

例如,我想传递单个'and'字段(一个类别)和第二个'and'字段,该字段由多个'or'值组成:

$filters = array(
   'category' => 'cat name',
   'colour'   => array(
      'red',
      'green'
   )
);

I have try:

$results = $cloudSearchClient->search(array(
   'filterQuery' => "(and(category:'cat name') (or (colour:'red') (colour:'green')))"
));

所以搜索将找到与'猫名'匹配并且是红色或绿色的项目

我似乎无法手动传递正确的语法,然后也希望有一个好的干净的解决方案来将PHP数组转换为正确的AWS语法。

您可能需要检查两件事。首先是当您在facet数组中过滤时,您正在使用'OR'操作符,如果您在两个facet数组之间过滤,则使用' and '。根据您的使用情况,您希望在用户选择"红色"或"绿色"时显示结果。如。您返回的filterQuery应该具有查询-> "(或color:'red'(或color:'green'))"

第二个是监视传递到aws URL的查询。您的过滤器查询可能是正确的,但是URL字符串需要添加html编码的空格。例如http://your-search-domain/2013-01-01/search?&q.parser=structured&q.options=%7Bsomefield%27%2C+%27&sort=something%20&fq=%28or+color%3A%27red%27%28or+color%3A%27green%27%29%29....."