Reindexing Specific Products in Magento 2
In this article, we’ll create a new command for reindexing specific products in Magento 2. With this command, you can reindex single or multiple products by ID or SKU.
As we all know Magento 2 provides an indexing command by default but when we run that command it’ll reindex all the products. If we have a small catalog then it’ll be fine but if we have a big catalog then it’ll task more time to complete the process. So, to overcome this issue we’ll create new command which will help you reindex specific products.
Let's get started!!
To create a custom command you have to follow the simple steps which are listed below.
Before we start, we need to create Devhooks folder as a Namespace at app/code/ and create a Module folder SpecificProductIndexing at app/code/Devhooks/ location.
Step 1: Create a module.xml file at app/code/Devhooks/SpecificProductIndexing/etc/ and paste the below code.
Note: Don't forgot to replace the Devhooks_SpecificProductIndexing with your Namespace and Module Name if it's different.
saveCopyzoom_out_map<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="Devhooks_SpecificProductIndexing" setup_version="1.0.0">
</module>
</config>
Step 2: Create registration file registration.php at app/code/Devhooks/SpecificProductIndexing/ and paste the below code.
saveCopyzoom_out_map<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Devhooks_SpecificProductIndexing', __DIR__ );
Step 3: Create a di.xml at app/code/Devhooks/SpecificProductIndexing/etc/ and paste the below code.
saveCopyzoom_out_map<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="Customcommand" xsi:type="object">Devhooks\SpecificProductIndexing\Console\Customcommand</item>
</argument>
</arguments>
</type>
</config>
Step 4: Create a Customcommand.php at app/code/Devhooks/SpecificProductIndexing/Console/ and paste the below code.
saveCopyzoom_out_map<?php
namespace Devhooks\SpecificProductIndexing\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class Customcommand extends Command
{
const SKU = 'sku';
const ID = 'id';
protected $indexerRegistry;
protected $productCollection;
public function __construct(
\Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
\Magento\Catalog\Model\Product $productCollection
) {
$this->indexerRegistry = $indexerRegistry;
$this->productCollection = $productCollection;
parent::__construct();
}
protected function configure()
{
$this->setName('indexer:reindex:specific');
$this->setDescription('Reindex Specific Product.');
$this->addOption(
self::SKU,
null,
InputOption::VALUE_REQUIRED,
'Reindex specific product by SKU'
);
$this->addOption(
self::ID,
null,
InputOption::VALUE_REQUIRED,
'Reindex specific product by ID'
);
parent::configure();
}
protected function execute(InputInterface $input, OutputInterface $output)
{
try {
$indexList = [
'catalog_category_product',
'catalog_product_category',
'catalog_product_attribute',
'cataloginventory_stock',
'inventory',
'catalogsearch_fulltext',
'catalog_product_price',
];
if ($input->getOption(self::SKU) || $input->getOption(self::ID)) {
foreach ($indexList as $index) {
$Indexer = $this->indexerRegistry->get($index);
if($input->getOption(self::SKU)){
$productIds = explode(',', $input->getOption(self::SKU));
}else{
$productIds = explode(',', $input->getOption(self::ID));
}
foreach ($productIds as $id) {
if($input->getOption(self::SKU)){
$id = $this->getProductIdBySku($id);
}
$Indexer->reindexList([$id]);
}
$output->writeln('<info>'.$Indexer->getTitle().' index has been rebuilt successfully</info>');
}
}else{
$output->writeln('<error>Please add --id=1 or --sku=24-MB01,24-MB04</error>');
$output->writeln('<comment>For Ex: php bin/magento indexer:reindex:specific --sku=24-MB01</comment>');
}
} catch (\Exception $e) {
echo $e->getMessage();
}
}
public function getProductIdBySku($sku) {
return $productId = $this->productCollection->getIdBySku($sku);
}
}
Step 5: Open Command line in folder root of magento and run the below commands.
saveCopyzoom_out_mapphp bin/magento setup:upgrade php bin/magento cache:clean
Finally, our new command is created. To confirm that run the below command to check the Magento command list and find your command in a list under the indexer section.
saveCopyzoom_out_mapphp bin/magento
How to use this command?
In the above code, you can see we've created a new command indexer:reindex:specific with 2 options --id and --sku.
You can use that commad like below examples.
Reindex single product by ID/SKU
saveCopyzoom_out_mapphp bin/magento indexer:reindex:specific --id=1
saveCopyzoom_out_mapphp bin/magento indexer:reindex:specific --sku=24-MB01
Reindex multiple products by IDs/SKU
saveCopyzoom_out_mapphp bin/magento indexer:reindex:specific --id=1,2
saveCopyzoom_out_mapphp bin/magento indexer:reindex:specific --sku=24-MB01,24-MB04
You need to add IDs/SKU by , seprate if you want to reindex multiple products.
That's it.
We have successfully created new command for reindex specific product by Ids/SKU. Also we've tested with above commands.
We hope this article helped you to know How to reindex specific product In Magento 2. Bookmark it for your future reference. Do comment below if you have any other questions or doubts.
P.S. Do share this post with your team.
AI-Powered Recommended Articles
How to Update Bulk Product SKU using CSV in Magento 2
Learn how to bulk update product SKUs using CSV files in Magento 2 to streamline product management processes.
How to Add Custom Sorting in Category of Magento 2.4 and Later
Explore the process of adding custom sorting in categories for Magento 2.4 and later versions.
How to Add Custom Sorting in Category of Magento 2
Learn how to add custom sorting options for categories in Magento 2 to improve product filtering.
How To Create a Magento 2 Module
Follow this guide to create a custom Magento 2 module from scratch for extended functionality.
How to Create/Use Message Queue in Magento 2
Learn how to create and configure message queues in Magento 2 for handling asynchronous tasks and improving performance.
Magento 2 Commands Shortcut
Discover useful command shortcuts in Magento 2 to enhance your development workflow and save time while managing your store.