Как кодировать массив php в запрос фильтра Amazon CloudSearch

У меня есть массив полей & значения, которые я хочу передать Amazon CloudSearchDomain в качестве аргумента filterQuery, используя один или оба оператора «и» или «или».

Например, я хотел бы передать одно поле ‘and’ (категория) и второе поле ‘and’, состоящее из нескольких значений ‘или’:

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

Я пытался:

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

Таким образом, в результате поиска будут найдены элементы, которые соответствуют «имени кошки» И имеют красный ИЛИ зеленый цвет.

Кажется, я не могу передать правильный синтаксис вручную, а затем хотел бы получить хорошее чистое решение для преобразования массива PHP в правильный синтаксис AWS, пожалуйста.

0

Решение

Вы можете проверить две вещи здесь.
Во-первых, когда вы фильтруете внутри массива фасетов, вы используете оператор «ИЛИ», а если вы фильтруете между двумя массивами фасетов, вы используете «И». Судя по вашему использованию, вы хотите отобразить результаты, когда пользователь выбирает «красный» или «зеленый». Например. Фильтр запроса, который вы возвращаете, должен иметь запрос -> «(или цвет: ‘красный’ (или цвет: ‘зеленый’))»

Второй — это мониторинг запроса, который передается на URL-адрес aws. Ваш запрос фильтра может быть правильным, но строка URL должна быть добавлена ​​с html-кодированным пространством. Например Http: // ваш-поиск домена / 2013-01-01 / поиск?&q.parser = структурированным&q.options =% 7Bsomefield% 27% 2C +% 27&сортировать = что-то% 20&FQ =% 28or + цветной% 3A% 27red% 27% 28or + цветной% 3A% 27green% 27% 29% 29…..»

0

Другие решения

Других решений пока нет …