2015-11-15 2 views
1

У меня есть служба sf2, чтобы сделать запрос на поиск на сервере resasearch с foselasticabundle. Initialy я сделал запрос с фильтром:добавить фильтры с запросом foselasticabundle

public function findAll() 
{ 
    $query = new \Elastica\Query\MatchAll(); 
    $response = new \Elastica\Query\Filtered($query, self::setFilter()); 
    return $response; 
} 

public function setFilter() 
{ 
    $filter = new \Elastica\Filter\Bool(); 
    $filter->addMust(new \Elastica\Filter\Term(array('active' => true))); 
    return $filter; 
} 

В мой контроллер я получаю счет этого запроса:

$search = $this->get("mb.search"); 
    $query = $search->findAll(); 
    $nbOnline = $this->get("fos_elastica.index.xxxx.yy")->count($query); 

Этот код прекрасно работать. Я хотел бы добавить фильтр, основанный на матрице:

$languages = array(1,3,5) 

я не нашел хороший способ слишком добавить новый фильтр в моем запросе. Надеюсь, вы можете помочь мне в этом деле. Заранее спасибо

ответ

2

Вы можете использовать "Terms" filter для этой задачи, here is реализация PHP.

Вы код должен быть выглядел следующим образом:

new \Elastica\Filter\Terms(array('MY_FIELD' => array(1,3,5))) 
+0

спасибо, я добавить это на мой метод: $ фильтр-> addMust (новые \ Elastica \ Filter \ Термины (массив ('язык' => $ this- -> языки))); но теперь у меня есть ошибка. Предупреждение: тип нелегального смещения. 500 Внутренняя ошибка сервера. ContextErrorException. – Olivier

+0

@Olivier. Я не ваша структура индекса. Не знаю, почему вы получаете эту ошибку. Попробуйте создать запрос к вашему индексу с помощью Sense плагин (Google chrome), а затем преобразовать его в PHP. – xurshid29

+1

спасибо за вашу помощь, я нашел решение, хороший синтаксис - новый \ Elastica \ Filter \ Terms ('MY_FIELD', $ array) – Olivier

Смежные вопросы