<?php declare(strict_types=1);
namespace Swpa\SwpaSort\Subscriber\Elasticsearch;
use Shopware\Elasticsearch\Framework\Indexing\Event\ElasticsearchIndexConfigEvent;
use Shopware\Elasticsearch\Product\ElasticsearchProductDefinition;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ElasticsearchIndexConfigEventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
ElasticsearchIndexConfigEvent::class => 'onIndexConfiguration',
];
}
public function onIndexConfiguration(ElasticsearchIndexConfigEvent $event): void
{
$config = $event->getConfig();
$definition = $event->getDefinition();
if(!$definition instanceof ElasticsearchProductDefinition){
return;
}
$config['mappings']['properties'] = $this->addPositionIndex($config['mappings']['properties']);
$event->setConfig($config);
}
private function addPositionIndex(array $mapping) : array
{
$mapping['swpaPosition'] = [
'type' => 'object',
'dynamic' => true
];
return $mapping;
}
}