我有一个字段数组&我希望使用一个或两个'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....."