Magento 2 Run Reindex Programmatically Everyting You Need To Know

Magento 2 is a powerful eCommerce platform that relies on indexing to enhance performance and improve the speed of retrieving data. Indexing transforms raw data, such as products, categories, and prices, into a structured format that accelerates query execution. However, there are instances when manual or automatic reindexing fails, requiring developers to trigger reindexing programmatically. In this article, we will discuss how to Magento 2 run reindex programmatically using different methods.
Understanding Magento 2 Indexing
Magento 2 uses indexing to optimize database queries and ensure a seamless shopping experience for customers. The indexing process updates the data structure whenever a change occurs, ensuring that the storefront reflects the most recent information. If the index is outdated, product details, pricing, or category changes may not appear correctly on the frontend.
Magento 2 supports different types of indexes, including:
- Product Price
- Product EAV
- Stock
- Catalog Rule
- Customer Grid
- Category Products
- Search Index
- Sales Rule
Why Run Reindexing Programmatically?
There are several reasons why you may need to run reindexing programmatically in Magento 2:
- Automation – Instead of manually running indexing via the admin panel or CLI, you can automate the process.
- Custom Development – Some custom modules may require programmatic reindexing to ensure real-time updates.
- Performance Optimization – Running reindexing at strategic intervals can prevent performance bottlenecks.
- Fixing Issues – If automatic reindexing fails due to cron job issues, programmatic execution provides an alternative solution.
Methods to Run Reindexing Programmatically in Magento 2
There are multiple ways to programmatically trigger reindexing in Magento 2. Below are three commonly used methods:
1. Running Reindexing via Command Line Interface (CLI)
Magento 2 provides a CLI command to run reindexing. If you have SSH access, you can execute the following command:
php bin/magento indexer:reindex
This command will reindex all indexers. If you want to reindex a specific indexer, use:
php bin/magento indexer:reindex catalog_product_price
where catalog_product_price is the indexer you want to reindex.
2. Running Reindexing Using a Custom PHP Script
You can trigger reindexing by creating a custom PHP script and executing it. Below is a sample script:
use Magento\Framework\App\Bootstrap;
require __DIR__ . ‘/app/bootstrap.php’;
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$indexerCollection = $obj->create(‘Magento\Indexer\Model\IndexerFactory’)->create()->getCollection();
foreach ($indexerCollection as $indexer) {
$indexer->reindexAll();
echo $indexer->getTitle() . ” reindexed successfully.” . PHP_EOL;
}
Save this file in your Magento 2 root directory (e.g., reindex.php) and execute it via the browser or command line:
php reindex.php
3. Running Reindexing Using a Custom Module
For a more integrated approach, you can create a custom module to run reindexing programmatically. Follow these steps:
Step 1: Create a Custom Module
Create the module structure in app/code/Vendor/Module/.
Step 2: Define the Module Registration File
Create app/code/Vendor/Module/registration.php:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
‘Vendor_Module’,
__DIR__
);
Step 3: Define the Module Configuration
Create app/code/Vendor/Module/etc/module.xml:
<?xml version=”1.0″?>
<config xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:noNamespaceSchemaLocation=”urn:magento:framework:Module/etc/module.xsd”>
<module name=”Vendor_Module” setup_version=”1.0.0″ />
</config>
Step 4: Create a Custom Command for Reindexing
Define app/code/Vendor/Module/Console/Command/Reindex.php:
namespace Vendor\Module\Console\Command;
use Magento\Framework\Indexer\IndexerInterface;
use Magento\Indexer\Model\IndexerFactory;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class Reindex extends Command
{
protected $indexerFactory;
public function __construct(IndexerFactory $indexerFactory)
{
$this->indexerFactory = $indexerFactory;
parent::__construct();
}
protected function configure()
{
$this->setName(‘vendor:reindex’)->setDescription(‘Run Magento 2 Reindex Programmatically’);
parent::configure();
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$indexerCollection = $this->indexerFactory->create()->getCollection();
foreach ($indexerCollection as $indexer) {
$indexer->reindexAll();
$output->writeln($indexer->getTitle() . ‘ reindexed successfully.’);
}
}
}
Step 5: Enable and Run the Module
Run the following commands:
php bin/magento module:enable Vendor_Module
php bin/magento setup:upgrade
php bin/magento cache:flush
Now, you can run the reindexing command using:
php bin/magento vendor:reindex
Conclusion
Reindexing is essential for maintaining accurate and updated data in Magento 2. While the admin panel and CLI provide reindexing options, programmatic execution is beneficial for automation, custom module development, and performance optimization. In this guide, we explored different methods to Magento 2 run reindex programmatically, including CLI, custom PHP scripts, and custom modules. Implement these techniques based on your requirements to ensure seamless data updates in your Magento 2 store