Мне нужно обновить один из веб-сайтов моего клиента с Symfony 2.8 / Elastic Search 1.7 / FOS \ elastica-bundle "3.2 до 3.4 / 6.2 / 5.0.3.
Я сделал копию существующего веб-сайта на новом сервере с установленным Elastic Search 6.2.
Я много читал об этом и понял, что мне нужно переписать пакет, который управлял эластичными запросами, потому что многие методы устарели, особенно фильтры DSL.
У вас есть представление о том, каким будет следующий код (в контроллере Bundle) в ES 6.2:
$query = $request->query->get("query","");
$finder = $this->container->get("fos_elastica.finder.scls_concert.concert");
$queryBuilder = new QueryBuilder();
$esTextQuery = $queryBuilder->query()->query_string($query);
$esDateFilter = $queryBuilder->filter()->range('date_start',array('gte' => (new \DateTime())->getTimestamp()));
$esQuery = $queryBuilder->query()->filtered($esTextQuery,$esDateFilter);
$result = $finder->findPaginated($esQuery,["size" => 5]);
Спасибо заранее.




Основная проблема в приведенном выше коде заключается в том, что Запрос filtered пропал и его необходимо заменить на bool:
Итак, я думаю, вы можете сделать что-то в этом роде:
$esDateFilter = new Range( 'date_start', array('gte' => (new \DateTime())->getTimestamp()) );
$esQuery = new BoolQuery();
$esQuery->addMust($esTextQuery);
$esQuery->addFilter($esDateFilter);
$result = $finder->findPaginated($esQuery,["size" => 5]);
Попробуйте просто удалить filter(), см. Мой обновленный ответ
Не работает, по-прежнему появляется ошибка «Фильтр DSL не поддерживается». Я также заменяю $ bool на $ esQuery.
Лучше выглядит со следующим кодом: $ esDateFilter = new Range ('date_start', array ('gte' => (new \ DateTime ()) -> getTimestamp ()));
Большое спасибо за помощь, Вэл, я очень признателен!
Круто, рад, что помог!
Боюсь, что следующая строка также неверна, поскольку фильтр DSL больше не поддерживается: $ esDateFilter = $ queryBuilder-> filter () -> range ('date_start', array ('gte' => (new \ DateTime ()) -> getTimestamp ()));