Shopware 6 поддерживает функцию ES «из коробки» (вам просто нужно ее активировать), но реализация чего-то сложного может привести к ошибкам. Если вы знаете, где искать, найти проблему будет проще.

Как работает поиск ES?

Elasticsearch используется только в явно определенных поисках. По умолчанию для него установлены значения ProductSearchRoute, ProductListingRoute и ProductSuggestRoute.

Чтобы использовать Elasticsearch для собственных поисков, обязательно добавьте состояние поддержки Elasticsearch к своим критериям.

Если запрос Elasticsearch завершается неудачно, данные загружаются с использованием MySQL. Вы можете отключить это поведение, установив переменную среды SHOPWARE_ES_THROW_EXCEPTION=1.

Elasticsearch служит для поиска идентификаторов продуктов для вашего поиска, и когда идентификаторы получены, Shopware получает продукты в БД, и поиск завершается.

Когда ES возвращает неверный список продуктов, в этом процессе может возникнуть несколько возможных проблем:
- Создание объекта поиска для ES
- Анализ запроса Shopware на запрос ES
- Отсутствует значения в базе данных документов ЭП

Первое место, где вы можете отладить ваши ES-запросы, — это профилировщик Symfony, который является частью платформы Shopware. Но для решения сложных задач вы можете пройти основные классы.

Чтобы получить полное тело из ES, вы можете добиться этого, удалив следующую строку в классе ElasticsearchProductDefinition.

'_source' => ['includes' => ['id', 'autoIncrement']],

TLTR;

Классы для проверки:
- ElasticsearchEntitySearcher
- CriteriaParser

-
ElasticsearchIndexer
- ElasticsearchProductDefinition
- ElasticsearchEntityAggregator

Проблемы, требующие отладки

Создание объекта поиска для ES

Поиск Elasticsearch выполняется в методе search() в классе ElasticsearchEntitySearcher. Этот класс сначала создает объект Search, а затем анализирует параметры поиска в читаемые запросы для ES.