Обновление Symfony и Elastic Search

Мне нужно обновить один из веб-сайтов моего клиента с 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]);

Спасибо заранее.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема в приведенном выше коде заключается в том, что Запрос 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]);

Боюсь, что следующая строка также неверна, поскольку фильтр DSL больше не поддерживается: $ esDateFilter = $ queryBuilder-> filter () -> range ('date_start', array ('gte' => (new \ DateTime ()) -> getTimestamp ()));

Mister PO 31.08.2018 16:50

Попробуйте просто удалить filter(), см. Мой обновленный ответ

Val 31.08.2018 16:53

Не работает, по-прежнему появляется ошибка «Фильтр DSL не поддерживается». Я также заменяю $ bool на $ esQuery.

Mister PO 31.08.2018 17:16

Лучше выглядит со следующим кодом: $ esDateFilter = new Range ('date_start', array ('gte' => (new \ DateTime ()) -> getTimestamp ()));

Mister PO 31.08.2018 17:49

Большое спасибо за помощь, Вэл, я очень признателен!

Mister PO 02.09.2018 08:47

Круто, рад, что помог!

Val 02.09.2018 09:16

Другие вопросы по теме