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

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

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

$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, пожалуйста.


person Alexander Holsgrove    schedule 15.10.2016    source источник


Ответы (1)


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

Во-вторых, отслеживайте запрос, который передается по URL-адресу aws. Ваш запрос фильтра может быть правильным, но строка URL должна быть дополнена пробелом в кодировке html. Например, http://your-search-domain/2013-01-01/search?&q.parser=structured&q.options=%7Bsomefield%27%2C+%27&sort=something%20&fq=% 28или+цвет%3A%27красный%27%28или+цвет%3A%27зеленый%27%29%29....."

person bcoolguy    schedule 26.10.2016