<?xml version="1.0"?>
<!--
/**
 * @author Amasty Team
 * @copyright Copyright (c) Amasty (https://www.amasty.com)
 * @package Elastic Search Base for Magento 2
 */-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Amasty\ElasticSearch\Model\Client\ClientRepositoryInterface"
                type="Amasty\ElasticSearch\Model\Client\ClientRepository"/>
    <preference for="Amasty\ElasticSearch\Api\Data\SynonymInterface"
                type="Amasty\ElasticSearch\Model\Synonym" />
    <preference for="Amasty\ElasticSearch\Api\SynonymRepositoryInterface"
                type="Amasty\ElasticSearch\Model\SynonymRepository" />
    <preference for="Amasty\ElasticSearch\Api\Data\StopWordInterface"
                type="Amasty\ElasticSearch\Model\StopWord" />
    <preference for="Amasty\ElasticSearch\Api\StopWordRepositoryInterface"
                type="Amasty\ElasticSearch\Model\StopWordRepository" />
    <preference for="Amasty\ElasticSearch\Api\Data\RelevanceRuleInterface"
                type="Amasty\ElasticSearch\Model\RelevanceRule" />
    <preference for="Amasty\ElasticSearch\Api\RelevanceRuleRepositoryInterface"
                type="Amasty\ElasticSearch\Model\RelevanceRuleRepository" />
    <preference for="Amasty\ElasticSearch\Api\Data\Indexer\Data\DataMapperResolverInterface"
                type="Amasty\ElasticSearch\Model\Indexer\Data\DataMapperResolver" />
    <preference for="Amasty\ElasticSearch\Api\Data\Indexer\Structure\AnalyzerBuilderInterface"
                type="Amasty\ElasticSearch\Model\Indexer\Structure\AnalyserBuilder" />
    <preference for="Amasty\ElasticSearch\Api\Data\Indexer\Structure\IndexBuilderInterface"
                type="Amasty\ElasticSearch\Model\Indexer\Structure\IndexBuilder" />

    <type name="Amasty\ElasticSearch\Model\Client\ClientFactory">
        <arguments>
            <argument name="engines" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty\ElasticSearch\Model\Client\Elasticsearch7\Client</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty\ElasticSearch\Model\Client\Elasticsearch8\Client</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty\ElasticSearch\Model\Client\Opensearch\Client</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\ElasticSearch\Model\GetAmastySearchEngines">
        <arguments>
            <argument name="amastySearchEngines" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">amasty_elastic</item>
                <item name="amasty_elastic_8" xsi:type="string">amasty_elastic_8</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">amasty_elastic_opensearch</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\ElasticSearch\Model\Client\ConfigBuilder">
        <arguments>
            <argument name="configBuilders" xsi:type="array">
                <item name="default" xsi:type="object">Amasty\ElasticSearch\Model\Client\Defaults\ConfigBuilder</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Config\QuerySettings">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="serializer" xsi:type="object">Magento\Framework\Serialize\Serializer\Json</item>
                <item name="processor" xsi:type="object">Amasty\ElasticSearch\Model\Config\QuerySettingsProcessor</item>
            </argument>
        </arguments>
    </type>
    <type name="Amasty\ElasticSearch\Model\RelevanceRule">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="catalogrule_factory" xsi:type="object">Amasty\ElasticSearch\Model\RuleFactory</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
        <arguments>
            <argument name="collections" xsi:type="array">
                <item name="amasty_elastic_stopword_listing_data_source"
                      xsi:type="string">Amasty\ElasticSearch\Model\ResourceModel\StopWord\Grid</item>
                <item name="amasty_elastic_synonym_listing_data_source"
                      xsi:type="string">Amasty\ElasticSearch\Model\ResourceModel\Synonym\Grid</item>
                <item name="amasty_elastic_relevance_rule_listing_data_source"
                      xsi:type="string">Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\Grid</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Framework\Search\Dynamic\IntervalFactory">
        <arguments>
            <argument name="intervals" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty\ElasticSearch\Model\Search\GetResponse\GetAggregations\Interval</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty\ElasticSearch\Model\Search\GetResponse\GetAggregations\Interval</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty\ElasticSearch\Model\Search\GetResponse\GetAggregations\Interval</item>
            </argument>
        </arguments>
    </type>
    <!-- Deprecated services
        <type name="Amasty\ElasticSearch\Model\Search\GetRequestQuery\InjectMatchQuery">
            <arguments>
                <argument name="services" xsi:type="array">
                    <item name="stopwords" xsi:type="object">Amasty\ElasticSearch\Model\Search\GetRequestQuery\ServicePreprocessor\Stopwords</item>
                    <item name="synonyms" xsi:type="object">Amasty\ElasticSearch\Model\Search\GetRequestQuery\ServicePreprocessor\Synonyms</item>
                </argument>
            </arguments>
        </type>
    -->
    <type name="Magento\CatalogSearch\Model\Indexer\IndexerHandlerFactory">
        <arguments>
            <argument name="handlers" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty\ElasticSearch\Model\Indexer\DataHandler</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty\ElasticSearch8\Model\Indexer\DataHandler</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty\Opensearch\Model\Indexer\DataHandler</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\Elasticsearch">
        <arguments>
            <argument name="fieldMappingBuilder"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\FieldMappingBuilder</argument>
            <argument name="saveQueryBuilder"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\SaveQueryBuilder</argument>
        </arguments>
    </type>
    <virtualType name="Amasty\ElasticSearch\Model\Adapter\Elasticsearch8\Elasticsearch"
                 type="Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\Elasticsearch">
        <arguments>
            <argument name="fieldMappingBuilder"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch8\FieldMappingBuilder</argument>
            <argument name="saveQueryBuilder"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch8\SaveQueryBuilder</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\ElasticSearch\Model\Adapter\Opensearch\Elasticsearch"
                 type="Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\Elasticsearch">
        <arguments>
            <argument name="fieldMappingBuilder"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Opensearch\FieldMappingBuilder</argument>
            <argument name="saveQueryBuilder"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch8\SaveQueryBuilder</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\ElasticSearch8\Model\Indexer\StructureHandler"
                 type="Amasty\ElasticSearch\Model\Indexer\StructureHandler">
        <arguments>
            <argument name="adapter"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch8\Elasticsearch</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\Opensearch\Model\Indexer\StructureHandler"
                 type="Amasty\ElasticSearch\Model\Indexer\StructureHandler">
        <arguments>
            <argument name="adapter"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Opensearch\Elasticsearch</argument>
        </arguments>
    </virtualType>
    <type name="Amasty\ElasticSearch\Model\Indexer\StructureHandler">
        <arguments>
            <argument name="adapter"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\Elasticsearch</argument>
        </arguments>
    </type>
    <type name="Amasty\ElasticSearch\Model\Indexer\DataHandler">
        <arguments>
            <argument name="adapter"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch7\Elasticsearch</argument>
        </arguments>
    </type>
    <virtualType name="Amasty\ElasticSearch8\Model\Indexer\DataHandler" type="Amasty\ElasticSearch\Model\Indexer\DataHandler">
        <arguments>
            <argument name="adapter"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Elasticsearch8\Elasticsearch</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\Opensearch\Model\Indexer\DataHandler" type="Amasty\ElasticSearch\Model\Indexer\DataHandler">
        <arguments>
            <argument name="adapter"
                      xsi:type="object">Amasty\ElasticSearch\Model\Adapter\Opensearch\Elasticsearch</argument>
        </arguments>
    </virtualType>
    <type name="Magento\CatalogSearch\Model\Indexer\IndexStructureFactory">
        <arguments>
            <argument name="structures" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty\ElasticSearch\Model\Indexer\StructureHandler</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty\ElasticSearch8\Model\Indexer\StructureHandler</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty\Opensearch\Model\Indexer\StructureHandler</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="Amasty\ElasticSearch\Model\InventorySalesApi\StockByWebsiteIdResolverInterface"
                 type="Amasty\ElasticSearch\Model\Di\Wrapper">
        <arguments>
            <argument name="name"
                      xsi:type="string">Magento\InventorySalesApi\Model\StockByWebsiteIdResolverInterface</argument>
            <argument name="isShared" xsi:type="boolean">true</argument>
        </arguments>
    </virtualType>
    <virtualType name="Amasty\ElasticSearch\Model\InventorySalesApi\GetStockItemDataInterface"
                 type="Amasty\ElasticSearch\Model\Di\Wrapper">
        <arguments>
            <argument name="name"
                      xsi:type="string">Magento\InventorySalesApi\Model\GetStockItemDataInterface</argument>
            <argument name="isShared" xsi:type="boolean">true</argument>
        </arguments>
    </virtualType>
    <type name="Amasty\ElasticSearch\Model\Indexer\Data\Product\OutofStockDataMapper">
        <arguments>
            <argument name="stockByWebsiteIdResolver"
                      xsi:type="object">Amasty\ElasticSearch\Model\InventorySalesApi\StockByWebsiteIdResolverInterface</argument>
            <argument name="getStockItemData"
                      xsi:type="object">Amasty\ElasticSearch\Model\InventorySalesApi\GetStockItemDataInterface</argument>
        </arguments>
    </type>
    <type name="Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder\Product\OutofStockData">
        <arguments>
            <argument name="stockByWebsiteIdResolver"
                      xsi:type="object">Amasty\ElasticSearch\Model\InventorySalesApi\StockByWebsiteIdResolverInterface</argument>
        </arguments>
    </type>
    <type name="Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder">
        <arguments>
            <argument name="entityBuilders" xsi:type="array">
                <item name="catalogsearch_fulltext" xsi:type="array">
                    <item name="catalog_product" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder\Product</item>
                    <item name="catalog_product_category_data" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder\Product\CategoryData</item>
                    <item name="external_finder" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder\External\Finder</item>
                    <item name="out_of_stock_field" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Structure\EntityBuilder\Product\OutofStockData</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Indexer\Data\DataMapperResolver">
        <arguments>
            <argument name="dataMappers" xsi:type="array">
                <item name="catalogsearch_fulltext" xsi:type="array">
                    <item name="catalog_product" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Data\Product\ProductDataMapper</item>
                    <item name="catalog_product_category" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Data\Product\ProductCategoryDataMapper</item>
                    <item name="catalog_product_price" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Data\Product\ProductPriceDataMapper</item>
                    <item name="external_finder" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Data\External\FinderDataMapper</item>
                    <item name="external_relevance_boost" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Data\External\RelevanceBoostDataMapper</item>
                    <item name="out_of_stock_value" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Data\Product\OutofStockDataMapper</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Search\GetRequestQuery">
        <arguments>
            <argument name="subqueryInjectors" xsi:type="array">
                <item name="match" xsi:type="object">Amasty\ElasticSearch\Model\Search\GetRequestQuery\InjectMatchQuery</item>
                <item name="wildcardFilter" xsi:type="object">Amasty\ElasticSearch\Model\Search\GetRequestQuery\InjectFilterWildcardQuery</item>
                <item name="rangeFilter" xsi:type="object">Amasty\ElasticSearch\Model\Search\GetRequestQuery\InjectFilterRangeQuery</item>
                <item name="termFilter" xsi:type="object">Amasty\ElasticSearch\Model\Search\GetRequestQuery\InjectFilterTermQuery</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Indexer\Structure\DynamicTemplateMapper">
        <arguments>
            <argument name="mappers" xsi:type="array">
                <item name="category_position_mapping" xsi:type="object">Amasty\ElasticSearch\Model\Indexer\Structure\DynamicTemplate\CategoryPosition</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\CatalogSearch\Model\ResourceModel\EngineProvider">
        <arguments>
            <argument name="engines" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty\ElasticSearch\Model\ResourceModel\Engine</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty\ElasticSearch\Model\ResourceModel\Engine</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty\ElasticSearch\Model\ResourceModel\Engine</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Search\Model\AdapterFactory">
        <arguments>
            <argument name="adapters" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty\ElasticSearch\Model\Search\Adapter</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty\ElasticSearch\Model\Search\Adapter</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty\ElasticSearch\Model\Search\Adapter</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Search\Model\EngineResolver">
        <arguments>
            <argument name="engines" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">amasty_elastic</item>
                <item name="amasty_elastic_8" xsi:type="string">amasty_elastic_8</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">amasty_elastic_opensearch</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Search\Model\Adminhtml\System\Config\Source\Engine">
        <arguments>
            <argument name="engines" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Amasty Elasticsearch</item>
                <item name="amasty_elastic_8" xsi:type="string">Amasty Elasticsearch 8</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Amasty Opensearch</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\AdvancedSearch\Model\SuggestedQueries">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="amasty_elastic" xsi:type="string">Magento\AdvancedSearch\Model\DataProvider\Suggestions</item>
                <item name="amasty_elastic_8" xsi:type="string">Magento\AdvancedSearch\Model\DataProvider\Suggestions</item>
                <item name="amasty_elastic_opensearch" xsi:type="string">Magento\AdvancedSearch\Model\DataProvider\Suggestions</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\Xsearch\Helper\Data">
        <plugin name="Amasty_ElasticSearch::RemoveStopWordsHighlight"
                type="Amasty\ElasticSearch\Plugin\Xsearch\Helper\Data" />
    </type>

    <type name="Magento\Framework\Search\Dynamic\Algorithm\Improved">
        <arguments>
            <argument name="algorithm" xsi:type="object">Amasty\ElasticSearch\Model\Search\Dynamic\Algorithm</argument>
        </arguments>
    </type>

    <virtualType name="amElasticsearchCategoryCollectionFactory" type="Magento\CatalogSearch\Model\ResourceModel\Fulltext\SearchCollectionFactory">
        <arguments>
            <argument name="instanceName" xsi:type="string">elasticsearchCategoryCollection</argument>
        </arguments>
    </virtualType>

    <virtualType name="amElasticsearchFulltextSearchCollectionFactory" type="Magento\CatalogSearch\Model\ResourceModel\Fulltext\SearchCollectionFactory">
        <arguments>
            <argument name="instanceName" xsi:type="string">elasticsearchFulltextSearchCollection</argument>
        </arguments>
    </virtualType>

    <virtualType name="elasticsearchLayerCategoryItemCollectionProvider" type="Magento\Elasticsearch\Model\Layer\Category\ItemCollectionProvider">
        <arguments>
            <argument name="factories" xsi:type="array">
                <item name="amasty_elastic" xsi:type="object">amElasticsearchCategoryCollectionFactory</item>
                <item name="amasty_elastic_8" xsi:type="object">amElasticsearchCategoryCollectionFactory</item>
                <item name="amasty_elastic_opensearch" xsi:type="object">amElasticsearchCategoryCollectionFactory</item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="elasticsearchLayerSearchItemCollectionProvider" type="Magento\Elasticsearch\Model\Layer\Search\ItemCollectionProvider">
        <arguments>
            <argument name="factories" xsi:type="array">
                <item name="amasty_elastic" xsi:type="object">amElasticsearchFulltextSearchCollectionFactory</item>
                <item name="amasty_elastic_8" xsi:type="object">amElasticsearchFulltextSearchCollectionFactory</item>
                <item name="amasty_elastic_opensearch" xsi:type="object">amElasticsearchFulltextSearchCollectionFactory</item>
            </argument>
        </arguments>
    </virtualType>

    <type name="Magento\CatalogSearch\Model\Search\ItemCollectionProvider">
        <arguments>
            <argument name="factories" xsi:type="array">
                <item name="amasty_elastic" xsi:type="object">Amasty\ElasticSearch\Model\ResourceModel\Advanced\CollectionFactory</item>
                <item name="amasty_elastic_8" xsi:type="object">Amasty\ElasticSearch\Model\ResourceModel\Advanced\CollectionFactory</item>
                <item name="amasty_elastic_opensearch" xsi:type="object">Amasty\ElasticSearch\Model\ResourceModel\Advanced\CollectionFactory</item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Search\Model\Search\PageSizeProvider">
        <arguments>
            <argument name="pageSizeBySearchEngine" xsi:type="array">
                <item name="amasty_elastic" xsi:type="number">10000</item>
                <item name="amasty_elastic_8" xsi:type="number">10000</item>
                <item name="amasty_elastic_opensearch" xsi:type="number">10000</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Indexer\Structure\CustomAnalyzersMetaInfoProvider">
        <arguments>
            <argument name="customAnalyzersMetaInfo" xsi:type="array">
                <item name="smartcn" xsi:type="array">
                    <item name="class" xsi:type="string">Amasty\ElasticSearch\Model\Indexer\Structure\AnalyzerBuilder\Smartcn</item>
                    <item name="label" xsi:type="string" translatable="true">Chinese</item>
                </item>
                <item name="kuromoji" xsi:type="array">
                    <item name="class" xsi:type="string">Amasty\ElasticSearch\Model\Indexer\Structure\AnalyzerBuilder\Kuromoji</item>
                    <item name="label" xsi:type="string" translatable="true">Japanese</item>
                </item>
                <item name="nori" xsi:type="array">
                    <item name="class" xsi:type="string">Amasty\ElasticSearch\Model\Indexer\Structure\AnalyzerBuilder\Nori</item>
                    <item name="label" xsi:type="string" translatable="true">Korean</item>
                </item>
            </argument>
        </arguments>
    </type>

    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="environment" xsi:type="array">
                <item name="amasty_elastic/connection/server_hostname" xsi:type="string">1</item>
                <item name="amasty_elastic/connection/server_port" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Search\GetRequestQuery">
        <arguments>
            <argument name="requestNamesForApplyRelevanceRules" xsi:type="array">
                <item name="catalog_search" xsi:type="string">catalogsearch_fulltext</item>
                <item name="quick_search" xsi:type="string">quick_search_container</item>
                <item name="graphql_search" xsi:type="string">graphql_product_search</item>
            </argument>
        </arguments>
    </type>

    <virtualType name="Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\OnDeleteCallbackPull"
                 type="Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\CRUDCallbackPull">
        <arguments>
            <argument name="crudCallbacks" xsi:type="array">
                <item name="0" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">10</item>
                    <item name="action" xsi:type="object">
                        Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\AdditionalSaveActions\InvalidateFulltextIndex
                    </item>
                </item>
            </argument>
        </arguments>
    </virtualType>

    <virtualType name="Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\OnSaveCallbackPull"
                 type="Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\CRUDCallbackPull">
        <arguments>
            <argument name="crudCallbacks" xsi:type="array">
                <item name="0" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">10</item>
                    <item name="action" xsi:type="object">
                        Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\AdditionalSaveActions\ReindexRules
                    </item>
                </item>
                <item name="1" xsi:type="array">
                    <item name="sortOrder" xsi:type="number">20</item>
                    <item name="action" xsi:type="object">
                        Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\AdditionalSaveActions\InvalidateFulltextIndex
                    </item>
                </item>
            </argument>
        </arguments>
    </virtualType>

    <type name="Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule">
        <arguments>
           <argument name="onDeleteCallbackPull" xsi:type="object">
               Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\OnDeleteCallbackPull
           </argument>
            <argument name="onSaveCallbackPull" xsi:type="object">
                Amasty\ElasticSearch\Model\ResourceModel\RelevanceRule\OnSaveCallbackPull
            </argument>
        </arguments>
    </type>

    <type name="Magento\CatalogRule\Model\ResourceModel\Product\ConditionsToCollectionApplier">
        <plugin name="Amasty_ElasticSearch::removeSortingCondition"
                type="Amasty\ElasticSearch\Plugin\CatalogRule\Model\ResourceModel\Product\ConditionsToCollectionApplier\DisableValidateCondition"/>
    </type>

    <virtualType name="Amasty\ElasticSearch\Model\Rule\Condition\CombineFactory"
                 type="Magento\CatalogRule\Model\Rule\Condition\CombineFactory">
        <arguments>
            <argument name="instanceName" xsi:type="string">Amasty\ElasticSearch\Model\Rule\Condition\Combine</argument>
        </arguments>
    </virtualType>

    <type name="Amasty\ElasticSearch\Model\Rule">
        <arguments>
            <argument name="combineFactory" xsi:type="object">Amasty\ElasticSearch\Model\Rule\Condition\CombineFactory</argument>
        </arguments>
    </type>

    <type name="Amasty\ElasticSearch\Model\Rule\Condition\Combine">
        <arguments>
            <argument name="data" xsi:type="array">
                <item name="amasty_sorting" xsi:type="array">
                    <item name="bestseller" xsi:type="object">Amasty\ElasticSearch\Model\Rule\Condition\Bestsellers</item>
                </item>
                <item name="module_manager" xsi:type="object">Magento\Framework\Module\Manager</item>
            </argument>
        </arguments>
    </type>
</config>
