Symfony2 Elastica bundle (elasticsearch) – можно ограничить только «активные» предметы?

В настоящее время я использую FOQElasticaBundle для взаимодействия с моим сервером elasticsearch, но я не могу найти способ ограничить результаты поиска на основе «активного» флага для каждого объекта. Возможно ли установить это в конфигурации каким-то образом? Вот моя текущая конфигурация:

foq_elastica: clients: default: { host: localhost, port: 9200 } indexes: website: client: default types: story: mappings: title: { boost: 8 } summary: { boost: 5 } text: { boost: 3 } author: persistence: driver: orm # orm, mongodb, propel are available model: Joe\Bundle\StoryBundle\Entity\Story provider: listener: finder: 

Я не могу просто исключить неактивные истории на уровне контроллера / просмотра, потому что это испортит разбиение на страницы – мне нужно будет иметь согласованное количество элементов на странице, чтобы поиск должен был отфильтровывать любые истории, где active ложная ( или 0). Я уверен, что это должно быть возможно, но кто-нибудь знает, как это сделать.

Благодарю.

РЕДАКТИРОВАТЬ

После того, как вам не повезло указать пользовательский query_builder_method для провайдера, у меня был шанс указать вместо этого специальный репозиторий и построить мой запрос. Но я еще не смог заставить это работать. Вот мой метод поиска:

 public function findByQueryString($queryString) { $builder = new \Elastica_Query_Builder(); $builder ->queryString() ->field('query', $queryString) ->queryStringClose() ->filter() ->term() ->field('active', 1) ->termClose() ->filterClose() ; // TODO check published date... return $this->findPaginated($builder); } 

Что дает следующий JSON:

 { "query": { "query_string": { "query": "story" }, "filter": { "term": { "active": "1" } } }, "from": 0, "size": 10 } 

Но по какой-то причине ему, похоже, не нравится «термин» части фильтра. Я просто пытался подражать тому, что находится в документации по elasticsearch, но я признаю, что не знаю, что я должен делать!

Да, это возможно с помощью Doctrine query builder . Читайте здесь .

  persistence: driver: orm model: Application\UserBundle\Entity\User provider: query_builder_method: createIsActiveQueryBuilder 

ОК это было 3 года назад, но новые читатели могли бы прочитать этот ответ.

==> Это актуально очень просто и не требует никакой работы.

Например, у меня есть объект Post с «опубликованным» логическим полем. Не забудьте указать получателя этого поля в классе объектов. В этом примере получатель getPublished. Тогда вы можете просто настроить прослушиватель в вашем файле конфигурации таким образом.

  persistence: listener: is_indexable_callback: "getPublished" 

Вот документ