Skip to main content
Stack Overflow
  1. About
  2. For Teams

Return to Question

deleted 1064 characters in body; edited title
Source Link
DarkBee
  • 14.4k
  • 9
  • 86
  • 135

Magento 2 Custom Indexer Not Triggered When Virtual Rule Changesindexer not triggered when virtual rule changes in ElasticSuite using mview.xml

What is missing to trigger the custom indexer invalidated when a virtual rule is updated?

Here's what I have:

<?php
declare(strict_types=1);
 namespace Vendor\Module\Model;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\Product;
use Magento\CatalogRule\Model\Rule;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Indexer\SaveHandler\Batch;
use Magento\Framework\Search\Request\DimensionFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use External\SearchModule\Api\Index\IndexOperationInterface;
use External\VirtualCategory\Model\Category\Attribute\VirtualRule\ReadHandler;
use Vendor\Module\Model\Action\Full;
use Vendor\Module\Model\ResourceModel\Link;
use Vendor\Module\Model\TableMaintainer;
/**
 * class Virtual Category products Indexer
 */
class Indexer implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
 /**
 * @var string
 */
 public const INDEXER_ID = 'elasticsuite_virtual_categories';
 /**
 * @param StoreManagerInterface $storeManager
 * @param DimensionFactory $dimensionFactory
 * @param CategoryProductLink $defaultIndexerResource
 * @param CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer
 * @param IndexOperationInterface $indexOperation
 * @param Batch $batch
 * @param ReadHandler $readHandler
 * @param Full $fullAction
 * @param ResourceConnection $resourceConnection
 */
 public function __construct(
 protected StoreManagerInterface $storeManager,
 protected DimensionFactory $dimensionFactory,
 protected CategoryProductLink $defaultIndexerResource,
 protected CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer,
 protected IndexOperationInterface $indexOperation,
 protected Batch $batch,
 protected ReadHandler $readHandler,
 protected Full $fullAction,
 protected readonly ResourceConnection $resourceConnection
 ) {}
 /*
 * Used by mview, allows process indexer in the "Update on schedule" mode
 */
 public function execute($ids)
 {
 $this->logger->info('⚙️ Running Virtual Category Indexer - execute()');
 $this->logger->info('Product IDs passed: ' . json_encode($ids));
 //Used by mview, allows you to process multiple placed orders in the "Update on schedule" mode
 }
 /*
 * Will take all of the data and reindex
 * Will run when reindex via command line
 */
 public function executeFull()
 {
 
 }
 /*
 * Works with a set of entity changed (may be massaction)
 */
 public function executeList(array $ids)
 {
 //Works with a set of placed orders (mass actions and so on)
 }
 /*
 * Works in runtime for a single entity using plugins
 */
 public function executeRow($id)
 {
 //Works in runtime for a single order using plugins
 }
}
<?php
declare(strict_types=1);
 namespace Vendor\Module\Model;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\Product;
use Magento\CatalogRule\Model\Rule;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Indexer\SaveHandler\Batch;
use Magento\Framework\Search\Request\DimensionFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use External\SearchModule\Api\Index\IndexOperationInterface;
use External\VirtualCategory\Model\Category\Attribute\VirtualRule\ReadHandler;
use Vendor\Module\Model\Action\Full;
use Vendor\Module\Model\ResourceModel\Link;
use Vendor\Module\Model\TableMaintainer;
/**
 * class Virtual Category products Indexer
 */
class Indexer implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
 /**
 * @var string
 */
 public const INDEXER_ID = 'elasticsuite_virtual_categories';
 /**
 * @param StoreManagerInterface $storeManager
 * @param DimensionFactory $dimensionFactory
 * @param CategoryProductLink $defaultIndexerResource
 * @param CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer
 * @param IndexOperationInterface $indexOperation
 * @param Batch $batch
 * @param ReadHandler $readHandler
 * @param Full $fullAction
 * @param ResourceConnection $resourceConnection
 */
 public function __construct(
 protected StoreManagerInterface $storeManager,
 protected DimensionFactory $dimensionFactory,
 protected CategoryProductLink $defaultIndexerResource,
 protected CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer,
 protected IndexOperationInterface $indexOperation,
 protected Batch $batch,
 protected ReadHandler $readHandler,
 protected Full $fullAction,
 protected readonly ResourceConnection $resourceConnection
 ) {}
 /*
 * Used by mview, allows process indexer in the "Update on schedule" mode
 */
 public function execute($ids)
 {
 $this->logger->info('⚙️ Running Virtual Category Indexer - execute()');
 $this->logger->info('Product IDs passed: ' . json_encode($ids));
 //Used by mview, allows you to process multiple placed orders in the "Update on schedule" mode
 }
 /*
 * Will take all of the data and reindex
 * Will run when reindex via command line
 */
 public function executeFull()
 {
 
 }
 /*
 * Works with a set of entity changed (may be massaction)
 */
 public function executeList(array $ids)
 {
 //Works with a set of placed orders (mass actions and so on)
 }
 /*
 * Works in runtime for a single entity using plugins
 */
 public function executeRow($id)
 {
 //Works in runtime for a single order using plugins
 }
}

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
 <indexer id="elasticsuite_virtual_categories" view_id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer">
 <title translate="true">ElasticSuite Virtual Category Indexing</title>
 <description translate="true">Reindex ElasticSuite catalog Virtual categories.</description>
 </indexer>
</config>

✅ My Question : What is missing to trigger the custom indexer invalidated when a virtual rule is updated?`

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
 <indexer id="elasticsuite_virtual_categories" view_id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer">
 <title translate="true">ElasticSuite Virtual Category Indexing</title>
 <description translate="true">Reindex ElasticSuite catalog Virtual categories.</description>
 </indexer>
</config>

Magento 2 Custom Indexer Not Triggered When Virtual Rule Changes in ElasticSuite using mview.xml

Here's what I have:

<?php
declare(strict_types=1);
 namespace Vendor\Module\Model;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\Product;
use Magento\CatalogRule\Model\Rule;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Indexer\SaveHandler\Batch;
use Magento\Framework\Search\Request\DimensionFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use External\SearchModule\Api\Index\IndexOperationInterface;
use External\VirtualCategory\Model\Category\Attribute\VirtualRule\ReadHandler;
use Vendor\Module\Model\Action\Full;
use Vendor\Module\Model\ResourceModel\Link;
use Vendor\Module\Model\TableMaintainer;
/**
 * class Virtual Category products Indexer
 */
class Indexer implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
 /**
 * @var string
 */
 public const INDEXER_ID = 'elasticsuite_virtual_categories';
 /**
 * @param StoreManagerInterface $storeManager
 * @param DimensionFactory $dimensionFactory
 * @param CategoryProductLink $defaultIndexerResource
 * @param CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer
 * @param IndexOperationInterface $indexOperation
 * @param Batch $batch
 * @param ReadHandler $readHandler
 * @param Full $fullAction
 * @param ResourceConnection $resourceConnection
 */
 public function __construct(
 protected StoreManagerInterface $storeManager,
 protected DimensionFactory $dimensionFactory,
 protected CategoryProductLink $defaultIndexerResource,
 protected CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer,
 protected IndexOperationInterface $indexOperation,
 protected Batch $batch,
 protected ReadHandler $readHandler,
 protected Full $fullAction,
 protected readonly ResourceConnection $resourceConnection
 ) {}
 /*
 * Used by mview, allows process indexer in the "Update on schedule" mode
 */
 public function execute($ids)
 {
 $this->logger->info('⚙️ Running Virtual Category Indexer - execute()');
 $this->logger->info('Product IDs passed: ' . json_encode($ids));
 //Used by mview, allows you to process multiple placed orders in the "Update on schedule" mode
 }
 /*
 * Will take all of the data and reindex
 * Will run when reindex via command line
 */
 public function executeFull()
 {
 
 }
 /*
 * Works with a set of entity changed (may be massaction)
 */
 public function executeList(array $ids)
 {
 //Works with a set of placed orders (mass actions and so on)
 }
 /*
 * Works in runtime for a single entity using plugins
 */
 public function executeRow($id)
 {
 //Works in runtime for a single order using plugins
 }
}

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
 <indexer id="elasticsuite_virtual_categories" view_id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer">
 <title translate="true">ElasticSuite Virtual Category Indexing</title>
 <description translate="true">Reindex ElasticSuite catalog Virtual categories.</description>
 </indexer>
</config>

✅ My Question : What is missing to trigger the custom indexer invalidated when a virtual rule is updated?`

Custom indexer not triggered when virtual rule changes in ElasticSuite using mview.xml

What is missing to trigger the custom indexer invalidated when a virtual rule is updated?

Here's what I have:

<?php
declare(strict_types=1);
 namespace Vendor\Module\Model;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\Product;
use Magento\CatalogRule\Model\Rule;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Indexer\SaveHandler\Batch;
use Magento\Framework\Search\Request\DimensionFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use External\SearchModule\Api\Index\IndexOperationInterface;
use External\VirtualCategory\Model\Category\Attribute\VirtualRule\ReadHandler;
use Vendor\Module\Model\Action\Full;
use Vendor\Module\Model\ResourceModel\Link;
use Vendor\Module\Model\TableMaintainer;
/**
 * class Virtual Category products Indexer
 */
class Indexer implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
 /**
 * @var string
 */
 public const INDEXER_ID = 'elasticsuite_virtual_categories';
 /**
 * @param StoreManagerInterface $storeManager
 * @param DimensionFactory $dimensionFactory
 * @param CategoryProductLink $defaultIndexerResource
 * @param CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer
 * @param IndexOperationInterface $indexOperation
 * @param Batch $batch
 * @param ReadHandler $readHandler
 * @param Full $fullAction
 * @param ResourceConnection $resourceConnection
 */
 public function __construct(
 protected StoreManagerInterface $storeManager,
 protected DimensionFactory $dimensionFactory,
 protected CategoryProductLink $defaultIndexerResource,
 protected CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer,
 protected IndexOperationInterface $indexOperation,
 protected Batch $batch,
 protected ReadHandler $readHandler,
 protected Full $fullAction,
 protected readonly ResourceConnection $resourceConnection
 ) {}
 /*
 * Used by mview, allows process indexer in the "Update on schedule" mode
 */
 public function execute($ids)
 {
 $this->logger->info('⚙️ Running Virtual Category Indexer - execute()');
 $this->logger->info('Product IDs passed: ' . json_encode($ids));
 //Used by mview, allows you to process multiple placed orders in the "Update on schedule" mode
 }
 /*
 * Will take all of the data and reindex
 * Will run when reindex via command line
 */
 public function executeFull()
 {
 
 }
 /*
 * Works with a set of entity changed (may be massaction)
 */
 public function executeList(array $ids)
 {
 //Works with a set of placed orders (mass actions and so on)
 }
 /*
 * Works in runtime for a single entity using plugins
 */
 public function executeRow($id)
 {
 //Works in runtime for a single order using plugins
 }
}
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
 <indexer id="elasticsuite_virtual_categories" view_id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer">
 <title translate="true">ElasticSuite Virtual Category Indexing</title>
 <description translate="true">Reindex ElasticSuite catalog Virtual categories.</description>
 </indexer>
</config>
deleted 24 characters in body
Source Link
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="Carhartt\ElasticsuiteCatalog\Model\Virtual\Indexer"class="....\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="Carhartt\ElasticsuiteCatalog\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>
Source Link

Magento 2 Custom Indexer Not Triggered When Virtual Rule Changes in ElasticSuite using mview.xml

I'm working on a custom Magento 2 indexer (Update by Schedule) for ElasticSuite virtual categories, but it's not being invalidated when I update a virtual rule in the admin.

Here's what I have:

<?php
declare(strict_types=1);
 namespace Vendor\Module\Model;
use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\Product;
use Magento\CatalogRule\Model\Rule;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Indexer\SaveHandler\Batch;
use Magento\Framework\Search\Request\DimensionFactory;
use Magento\Store\Model\StoreManagerInterface;
use Magento\Framework\App\ResourceConnection;
use Magento\Catalog\Model\Product\Attribute\Source\Status;
use External\SearchModule\Api\Index\IndexOperationInterface;
use External\VirtualCategory\Model\Category\Attribute\VirtualRule\ReadHandler;
use Vendor\Module\Model\Action\Full;
use Vendor\Module\Model\ResourceModel\Link;
use Vendor\Module\Model\TableMaintainer;
/**
 * class Virtual Category products Indexer
 */
class Indexer implements \Magento\Framework\Indexer\ActionInterface, \Magento\Framework\Mview\ActionInterface
{
 /**
 * @var string
 */
 public const INDEXER_ID = 'elasticsuite_virtual_categories';
 /**
 * @param StoreManagerInterface $storeManager
 * @param DimensionFactory $dimensionFactory
 * @param CategoryProductLink $defaultIndexerResource
 * @param CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer
 * @param IndexOperationInterface $indexOperation
 * @param Batch $batch
 * @param ReadHandler $readHandler
 * @param Full $fullAction
 * @param ResourceConnection $resourceConnection
 */
 public function __construct(
 protected StoreManagerInterface $storeManager,
 protected DimensionFactory $dimensionFactory,
 protected CategoryProductLink $defaultIndexerResource,
 protected CategoryProductLinkTableMaintainer $categoryProductLinkTableMaintainer,
 protected IndexOperationInterface $indexOperation,
 protected Batch $batch,
 protected ReadHandler $readHandler,
 protected Full $fullAction,
 protected readonly ResourceConnection $resourceConnection
 ) {}
 /*
 * Used by mview, allows process indexer in the "Update on schedule" mode
 */
 public function execute($ids)
 {
 $this->logger->info('⚙️ Running Virtual Category Indexer - execute()');
 $this->logger->info('Product IDs passed: ' . json_encode($ids));
 //Used by mview, allows you to process multiple placed orders in the "Update on schedule" mode
 }
 /*
 * Will take all of the data and reindex
 * Will run when reindex via command line
 */
 public function executeFull()
 {
 
 }
 /*
 * Works with a set of entity changed (may be massaction)
 */
 public function executeList(array $ids)
 {
 //Works with a set of placed orders (mass actions and so on)
 }
 /*
 * Works in runtime for a single entity using plugins
 */
 public function executeRow($id)
 {
 //Works in runtime for a single order using plugins
 }
}

mview.xml

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Mview/etc/mview.xsd">
 <view id="elasticsuite_virtual_categories" class="Carhartt\ElasticsuiteCatalog\Model\Virtual\Indexer" group="indexer">
 <subscriptions>
 <table name="catalog_category_entity" entity_column="entity_id" />
 <table name="catalog_category_entity_datetime" entity_column="entity_id" />
 <table name="catalog_category_entity_decimal" entity_column="entity_id" />
 <table name="catalog_category_entity_int" entity_column="entity_id" />
 <table name="catalog_category_entity_text" entity_column="entity_id" />
 <table name="catalog_category_entity_varchar" entity_column="entity_id" />
 </subscriptions>
 </view>
</config>

indexer.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
 <indexer id="elasticsuite_virtual_categories" view_id="elasticsuite_virtual_categories" class="....\Model\Virtual\Indexer">
 <title translate="true">ElasticSuite Virtual Category Indexing</title>
 <description translate="true">Reindex ElasticSuite catalog Virtual categories.</description>
 </indexer>
</config>

✅ My Question : What is missing to trigger the custom indexer invalidated when a virtual rule is updated?`

AltStyle によって変換されたページ (->オリジナル) /