<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="elasticsearch.index.config" type="collection">
            <parameter key="settings" type="collection">
                <parameter key="index">%elasticsearch.index_settings%</parameter>
                <parameter key="analysis">%elasticsearch.analysis%</parameter>
            </parameter>
        </parameter>

        <parameter key="elasticsearch.index.mapping" type="collection">
            <parameter key="dynamic_templates">%elasticsearch.dynamic_templates%</parameter>
        </parameter>

        <parameter key="elasticsearch.administration.index.config" type="collection">
            <parameter key="settings" type="collection">
                <parameter key="index">%elasticsearch.administration.index_settings%</parameter>
                <parameter key="analysis">%elasticsearch.administration.analysis%</parameter>
            </parameter>
        </parameter>

        <parameter key="elasticsearch.administration.index.mapping" type="collection">
            <parameter key="dynamic_templates">%elasticsearch.administration.dynamic_templates%</parameter>
        </parameter>
    </parameters>

    <services>
        <service id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\CriteriaParser">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Shopware\Core\System\CustomField\CustomFieldService"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage" />
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchHelper" public="true">
            <argument>%kernel.environment%</argument>
            <argument>%elasticsearch.enabled%</argument>
            <argument>%elasticsearch.indexing_enabled%</argument>
            <argument>%elasticsearch.index_prefix%</argument>
            <argument>%elasticsearch.throw_exception%</argument>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchRegistry"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\CriteriaParser"/>
            <argument type="service" id="shopware.elasticsearch.logger" />
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchIndexingUtils">
            <argument type="service" id="Doctrine\DBAL\Connection" />
            <argument type="service" id="event_dispatcher" />
            <argument type="service" id="parameter_bag" />
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchFieldBuilder">
            <argument type="service" id="Shopware\Core\System\Language\LanguageLoader" />
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchIndexingUtils" />
            <argument>%elasticsearch.language_analyzer_mapping%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchFieldMapper">
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchIndexingUtils" />
        </service>

        <service id="OpenSearch\Client" public="true" lazy="true">
            <factory class="Shopware\Elasticsearch\Framework\ClientFactory" method="createClient" />
            <argument>%elasticsearch.hosts%</argument>
            <argument type="service" id="shopware.elasticsearch.logger" />
            <argument>%kernel.debug%</argument>
            <argument>%elasticsearch.ssl%</argument>
        </service>

        <service id="admin.openSearch.client" class="OpenSearch\Client" public="true" lazy="true">
            <factory class="Shopware\Elasticsearch\Framework\ClientFactory" method="createClient" />
            <argument>%elasticsearch.administration.hosts%</argument>
            <argument type="service" id="shopware.elasticsearch.logger" />
            <argument>%kernel.debug%</argument>
            <argument>%elasticsearch.ssl%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Indexing\IndexCreator">
            <argument type="service" id="OpenSearch\Client"/>
            <argument>%elasticsearch.index.config%</argument>
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\IndexMappingProvider"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Indexing\IndexMappingProvider">
            <argument>%elasticsearch.index.mapping%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Indexing\IndexMappingUpdater">
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchRegistry"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\IndexMappingProvider"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchIndexingCommand">
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\ElasticsearchIndexer"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\CreateAliasTaskHandler"/>
            <argument>%elasticsearch.indexing_enabled%</argument>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchTestAnalyzerCommand">
            <argument type="service" id="OpenSearch\Client"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchStatusCommand">
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchResetCommand">
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchOutdatedIndexDetector"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="shopware.increment.gateway.registry"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchUpdateMappingCommand">
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\IndexMappingUpdater"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchLanguageProvider">
            <argument type="service" id="language.repository"/>
            <argument type="service" id="event_dispatcher"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\ProductUpdater">
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\ElasticsearchIndexer"/>
            <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\AbstractElasticsearchSearchHydrator"
        class="Shopware\Elasticsearch\Framework\DataAbstractionLayer\ElasticsearchEntitySearchHydrator"/>

        <service id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\AbstractElasticsearchAggregationHydrator"
            class="Shopware\Elasticsearch\Framework\DataAbstractionLayer\ElasticsearchEntityAggregatorHydrator">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\ElasticsearchEntitySearcher"
                 decorates="Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearcherInterface"
                 decoration-priority="1000" public="true">

            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\ElasticsearchEntitySearcher.inner"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\CriteriaParser"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\AbstractElasticsearchSearchHydrator"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%elasticsearch.search.timeout%</argument>
            <argument>%elasticsearch.search.search_type%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\ElasticsearchEntityAggregator"
                 decorates="Shopware\Core\Framework\DataAbstractionLayer\Search\EntityAggregatorInterface"
                 decoration-priority="1000" public="true">

            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\ElasticsearchEntityAggregator.inner"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\DataAbstractionLayer\AbstractElasticsearchAggregationHydrator"/>
            <argument type="service" id="event_dispatcher"/>
            <argument>%elasticsearch.search.timeout%</argument>
            <argument>%elasticsearch.search.search_type%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Product\SearchKeywordReplacement"
                 decorates="Shopware\Core\Content\Product\DataAbstractionLayer\SearchKeywordUpdater"
                 decoration-priority="-50000">

            <argument type="service" id="Shopware\Elasticsearch\Product\SearchKeywordReplacement.inner"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\ProductSearchBuilder"
                 decorates="Shopware\Core\Content\Product\SearchKeyword\ProductSearchBuilderInterface"
                 decoration-priority="-50000">

            <argument type="service" id="Shopware\Elasticsearch\Product\ProductSearchBuilder.inner"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
            <argument>%elasticsearch.search.term_max_length%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Indexing\CreateAliasTaskHandler" public="true">
            <argument type="service" id="scheduled_task.repository" />
            <argument type="service" id="logger"/>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument>%elasticsearch.index.config%</argument>
            <argument type="service" id="event_dispatcher"/>

            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Indexing\CreateAliasTask">
            <tag name="shopware.scheduled.task"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchRegistry">
            <argument type="tagged_iterator" tag="shopware.es.definition"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchStagingHandler">
            <argument>%shopware.staging.elasticsearch.check_for_existence%</argument>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchOutdatedIndexDetector"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\ElasticsearchProductDefinition">
            <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Elasticsearch\Product\AbstractProductSearchQueryBuilder"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchFieldBuilder" />
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchFieldMapper" />
            <argument type="service" id="Shopware\Core\System\Language\SalesChannelLanguageLoader" />
            <argument>%elasticsearch.product.exclude_source%</argument>
            <argument>%kernel.environment%</argument>
            <argument type="service" id="Shopware\Core\System\Language\LanguageLoader" />

            <tag name="shopware.es.definition"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\StopwordTokenFilter">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Core\Framework\DataAbstractionLayer\Search\SearchConfigLoader">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\AbstractProductSearchQueryBuilder" class="Shopware\Elasticsearch\Product\ProductSearchQueryBuilder">
            <argument type="service" id="Shopware\Core\Content\Product\ProductDefinition"/>
            <argument type="service" id="Shopware\Elasticsearch\Product\StopwordTokenFilter"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\Term\Tokenizer"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Search\SearchConfigLoader"/>
            <argument type="service" id="Shopware\Elasticsearch\TokenQueryBuilder"/>
        </service>

        <service id="Shopware\Elasticsearch\TokenQueryBuilder">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\System\CustomField\CustomFieldService"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage" />
        </service>

        <service id="Shopware\Elasticsearch\Product\CustomFieldUpdater">
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchOutdatedIndexDetector"/>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="Shopware\Elasticsearch\Product\CustomFieldSetGateway"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\CustomFieldSetGateway">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchCreateAliasCommand">
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\CreateAliasTaskHandler"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchCleanIndicesCommand">
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchOutdatedIndexDetector"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchAdminIndexingCommand">
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminSearchRegistry" />
            <tag name="console.command"/>
            <tag name="kernel.event_subscriber" />
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchAdminResetCommand">
            <argument type="service" id="admin.openSearch.client"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="shopware.increment.gateway.registry"/>
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminElasticsearchHelper"/>

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchAdminTestCommand">
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminSearcher"/>
            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Command\ElasticsearchAdminUpdateMappingCommand">
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminSearchRegistry" />

            <tag name="console.command"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\ElasticsearchOutdatedIndexDetector">
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchRegistry"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\Indexing\ElasticsearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchRegistry"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\IndexCreator"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory"/>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="shopware.elasticsearch.logger" />
            <argument type="service" id="event_dispatcher"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="messenger.message_handler"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\LanguageSubscriber">
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchHelper"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\ElasticsearchRegistry"/>
            <argument type="service" id="OpenSearch\Client"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Elasticsearch\Profiler\DataCollector">
            <argument>%elasticsearch.enabled%</argument>
            <argument>%elasticsearch.administration.enabled%</argument>
            <argument type="service" id="OpenSearch\Client"/>
            <argument type="service" id="admin.openSearch.client"/>
            <tag name="data_collector" template="@Elasticsearch/Collector/elasticsearch.html.twig" id="elasticsearch"></tag>
        </service>

        <service id="shopware.elasticsearch.logger" alias="monolog.logger.elasticsearch"/>

        <!-- This is required to prevent the 'Environment variables %VAR is never used' error -->
        <service id="_dummy_es_env_usage" class="ArrayIterator" lazy="true" public="true">
            <argument type="collection">
                <argument>%env(bool:SHOPWARE_ES_ENABLED)%</argument>
                <argument>%env(bool:SHOPWARE_ES_INDEXING_ENABLED)%</argument>
                <argument>%env(string:OPENSEARCH_URL)%</argument>
                <argument>%env(string:SHOPWARE_ES_INDEX_PREFIX)%</argument>
                <argument>%env(bool:SHOPWARE_ES_THROW_EXCEPTION)%</argument>
                <argument>%env(int:SHOPWARE_ES_INDEXING_BATCH_SIZE)%</argument>
            </argument>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Subscriber\RefreshIndexSubscriber">
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminSearchRegistry"/>

            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="Shopware\Elasticsearch\Framework\SystemUpdateListener">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\ElasticsearchIndexer"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="Shopware\Elasticsearch\Framework\Indexing\IndexMappingUpdater"/>

            <tag name="kernel.event_listener"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\AdminElasticsearchHelper" public="true">
            <argument>%elasticsearch.administration.enabled%</argument>
            <argument>%elasticsearch.administration.refresh_indices%</argument>
            <argument>%elasticsearch.administration.index_prefix%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Admin\AdminSearchController" public="true">
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminSearcher"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\DefinitionInstanceRegistry"/>
            <argument type="service" id="Shopware\Core\Framework\Api\Serializer\JsonEntityEncoder"/>
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminElasticsearchHelper"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\AdminSearcher">
            <argument type="service" id="admin.openSearch.client"/>
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminSearchRegistry"/>
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminElasticsearchHelper"/>
            <argument>%elasticsearch.administration.search.timeout%</argument>
            <argument>%elasticsearch.administration.search.term_max_length%</argument>
        </service>

        <service id="Shopware\Elasticsearch\Admin\AdminSearchRegistry">
            <argument type="tagged_iterator" tag="shopware.elastic.admin-searcher-index" index-by="key"/>
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="messenger.default_bus"/>
            <argument type="service" id="event_dispatcher"/>
            <argument type="service" id="admin.openSearch.client"/>
            <argument type="service" id="Shopware\Elasticsearch\Admin\AdminElasticsearchHelper"/>
            <argument type="service" id="shopware.elasticsearch.logger"/>
            <argument>%elasticsearch.administration.index.config%</argument>
            <argument>%elasticsearch.administration.index.mapping%</argument>

            <tag name="kernel.event_subscriber"/>
            <tag name="messenger.message_handler" />
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\CmsPageAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="cms_page.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="cms_page"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\CustomerAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="customer.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="customer"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\CustomerGroupAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="customer_group.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="customer_group"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\LandingPageAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="landing_page.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="landing_page"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\ManufacturerAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="product_manufacturer.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="product_manufacturer"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\MediaAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="media.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="media"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\OrderAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="order.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="order"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\PaymentMethodAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="payment_method.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="payment_method"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\ProductAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="product.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="product"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\PromotionAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="promotion.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="promotion"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\PropertyGroupAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="property_group.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="property_group"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\SalesChannelAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="sales_channel.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="sales_channel"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\ShippingMethodAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="shipping_method.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="shipping_method"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\CategoryAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="category.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="category"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\NewsletterRecipientAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="newsletter_recipient.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="newsletter_recipient"/>
        </service>

        <service id="Shopware\Elasticsearch\Admin\Indexer\ProductStreamAdminSearchIndexer">
            <argument type="service" id="Doctrine\DBAL\Connection"/>
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\Common\IteratorFactory" />
            <argument type="service" id="product_stream.repository"/>
            <argument>%elasticsearch.indexing_batch_size%</argument>

            <tag name="shopware.elastic.admin-searcher-index" key="product_stream"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\ProductCriteriaParser" decorates="Shopware\Elasticsearch\Framework\DataAbstractionLayer\CriteriaParser">
            <argument type="service" id="Shopware\Core\Framework\DataAbstractionLayer\Dbal\EntityDefinitionQueryHelper"/>
            <argument type="service" id="Shopware\Core\System\CustomField\CustomFieldService"/>
            <argument type="service" id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage" />
            <argument type="service" id=".inner"/>
        </service>

        <service id="Shopware\Elasticsearch\Product\ElasticsearchOptimizeSwitch">
            <argument type="service" id="Shopware\Core\Framework\Adapter\Storage\AbstractKeyValueStorage" />
            <tag name="kernel.event_subscriber"/>
        </service>

    </services>
</container>
