Skip to content

Manipulate Elasticsearch query

You can customize the search query before it's executed. To do it, subscribe to Ibexa\Contracts\Elasticsearch\Query\Event\QueryFilterEvent.

The following example shows how to add a Search Criterion to all queries.

Depending on your configuration, this might impact all search queries, including those used for search and content tree in the back office.

``` php {skip-validation} hl_lines="34"

getQuery(); $additionalCriteria = new ObjectStateIdentifier('locked'); if ($query->filter !== null) { $query->filter = $additionalCriteria; } else { // Append Criterion to existing filter $query->filter = new LogicalAnd([ $query->filter, $additionalCriteria, ]); } } public static function getSubscribedEvents(): array { return [ QueryFilterEvent::class => 'onQueryFilter', ]; } }
1
2
3
4
5
6
7
8
If you're not using [Symfony's autoconfiguration](https://symfony.com/doc/7.4/service_container.html#the-autoconfigure-option)
for event subscribers, register it as a service:

``` yaml
services:
    App\EventSubscriber\CustomQueryFilterSubscriber:
        tags:
            - { name: kernel.event_subscriber }
?>