{"id":132271,"date":"2018-08-21T23:59:55","date_gmt":"2018-08-21T23:59:55","guid":{"rendered":"https:\/\/inchoo.net\/?p=32693"},"modified":"2018-08-21T23:59:55","modified_gmt":"2018-08-21T23:59:55","slug":"command-to-reindex-required-indexers","status":"publish","type":"post","link":"https:\/\/www.sushilkumar.ind.in\/blog\/magento-2\/command-to-reindex-required-indexers\/","title":{"rendered":"Command to reindex required indexers"},"content":{"rendered":"<p>You are in a hurry and you do not want to manually type indexer codes to reindex? Well sit back and keep reading, you are in for a treat. <span id=\"more-32693\"><\/span><\/p>\n<p>By default, Magento has these console commands for the indexer <\/p>\n<p><strong>indexer<\/strong><\/p>\n<ul>\n<li><strong>indexer:info<\/strong> &#8211; Shows allowed Indexers<\/li>\n<li><strong>indexer:reindex <\/strong> &#8211; Reindexes Data<\/li>\n<li><strong>indexer:reset <\/strong> &#8211; Resets indexer status to invalid<\/li>\n<li><strong>indexer:set-mode<\/strong> &#8211; Sets index mode type<\/li>\n<li><strong>indexer:show-mode<\/strong> &#8211; Shows Index Mode<\/li>\n<li><strong>indexer:status <\/strong> &#8211; Shows status of Indexer<\/li>\n<\/ul>\n<p>So you probably asking yourself why do I need a custom command to reindex required (invalidated) indexers?<br \/>\nWell, we are kinda lazy and this command can save you some precious time you can spend on other things. Instead of writing this command:<\/p>\n<pre class=\"ish\"><code class=\"language-bash\">bin<span class=\"sy0\">\/<\/span>magento indexer:reindex customer_grid catalog_product_flat ...and other invalidated indexers...<\/code><\/pre>\n<p>we will be using this:<\/p>\n<pre class=\"ish\"><code class=\"language-bash\">bin<span class=\"sy0\">\/<\/span>magento indexer:reindex:required<\/code><\/pre>\n<h3>Module<\/h3>\n<p>To get started we need to create a new module, there are plenty of tutorials online how to create a new module, so we will skip that and dig into juicy stuff.<\/p>\n<p>To add a new command you need to create <code>di.xml<\/code> and put this in:<\/p>\n<pre class=\"ish\"><code class=\"language-xml\"><span class=\"sc3\"><span class=\"re1\">&lt;?xml<\/span> <span class=\"re0\">version<\/span>=<span class=\"st0\">&quot;1.0&quot;<\/span><span class=\"re2\">?&gt;<\/span><\/span>\n<span class=\"sc3\"><span class=\"re1\">&lt;config<\/span> <span class=\"re0\">xmlns:xsi<\/span>=<span class=\"st0\">&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;<\/span> <span class=\"re0\">xsi:noNamespaceSchemaLocation<\/span>=<span class=\"st0\">&quot;urn:magento:framework:ObjectManager\/etc\/config.xsd&quot;<\/span><span class=\"re2\">&gt;<\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;type<\/span> <span class=\"re0\">name<\/span>=<span class=\"st0\">&quot;Magento\\Framework\\Console\\CommandListInterface&quot;<\/span><span class=\"re2\">&gt;<\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;arguments<span class=\"re2\">&gt;<\/span><\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;argument<\/span> <span class=\"re0\">name<\/span>=<span class=\"st0\">&quot;commands&quot;<\/span> <span class=\"re0\">xsi:type<\/span>=<span class=\"st0\">&quot;array&quot;<\/span><span class=\"re2\">&gt;<\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;item<\/span> <span class=\"re0\">name<\/span>=<span class=\"st0\">&quot;required&quot;<\/span> <span class=\"re0\">xsi:type<\/span>=<span class=\"st0\">&quot;object&quot;<\/span><span class=\"re2\">&gt;<\/span><\/span>Inchoo\\ReindexRequired\\Console\\Command\\IndexerReindexRequiredCommand<span class=\"sc3\"><span class=\"re1\">&lt;\/item<span class=\"re2\">&gt;<\/span><\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;\/argument<span class=\"re2\">&gt;<\/span><\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;\/arguments<span class=\"re2\">&gt;<\/span><\/span><\/span> <span class=\"sc3\"><span class=\"re1\">&lt;\/type<span class=\"re2\">&gt;<\/span><\/span><\/span>\n<span class=\"sc3\"><span class=\"re1\">&lt;\/config<span class=\"re2\">&gt;<\/span><\/span><\/span><\/code><\/pre>\n<p>We are giving our command unique <code>name = \"required\"<\/code> (note that this is just internal indentifier) and class we will be using to execute the command.<\/p>\n<h3>Class<\/h3>\n<p>Next, we will create a <code>IndexerReindexRequiredCommand<\/code> class which will extend <code>\\Magento\\Indexer\\Console\\Command\\AbstractIndexerManageCommand<\/code>, because we are adding a command related to the indexers and there is no point to do it from scratch when Magento already have what we need.<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"kw2\">namespace<\/span> Inchoo\\ReindexRequired\\Console\\Command<span class=\"sy0\">;<\/span>\n&nbsp;\n<span class=\"kw2\">class<\/span> IndexerReindexRequiredCommand <span class=\"kw2\">extends<\/span> \\Magento\\Indexer\\Console\\Command\\AbstractIndexerManageCommand\n<span class=\"br0\">&#123;<\/span>\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<p>If we look at the parent class, there are no <code>__construct()<\/code> method declared, so we need to look at the parent of that class. <code>\\Magento\\Indexer\\Console\\Command\\AbstractIndexerCommand<\/code><\/p>\n<p>Class <code>\\Magento\\Indexer\\Console\\Command\\AbstractIndexerCommand<\/code> requires one class to be injected:<br \/>\n<code>\\Magento\\Framework\\App\\ObjectManagerFactory<\/code><\/p>\n<p>In our class we do the following:<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> __construct<span class=\"br0\">&#40;<\/span> \\Magento\\Framework\\App\\ObjectManagerFactory <span class=\"re0\">$objectManagerFactory<\/span>\n<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> parent<span class=\"sy0\">::<\/span>__construct<span class=\"br0\">&#40;<\/span><span class=\"re0\">$objectManagerFactory<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<h3>Configure<\/h3>\n<p>Next, we create <code>configure()<\/code> method to give our command a name and description.<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"kw2\">protected<\/span> <span class=\"kw2\">function<\/span> configure<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>\n<span class=\"br0\">&#123;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setName<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'indexer:reindex:required'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setDescription<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'Reindexes Required\/Invalidated Data'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-&gt;<\/span><span class=\"me1\">setDefinition<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getInputList<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&nbsp; parent<span class=\"sy0\">::<\/span><span class=\"me2\">configure<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<p>Our new command will now show up in terminal when we execute the <code>bin\/magento<\/code>.<\/p>\n<h3>Execute<\/h3>\n<p>The next step is to create the <code>execute<\/code> function and bring our command to life.<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> execute<span class=\"br0\">&#40;<\/span>InputInterface <span class=\"re0\">$input<\/span><span class=\"sy0\">,<\/span> OutputInterface <span class=\"re0\">$output<\/span><span class=\"br0\">&#41;<\/span>\n<span class=\"br0\">&#123;<\/span>\n&nbsp;\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<p>Well now, what do we need to do? We need to somehow write in terminal. We put two arguments into our function <code>InputInterface $input<\/code> and <code>OutputInterface $output<\/code>. <code>$input<\/code> is used to get arguments from terminal and <code>$output<\/code> is used to, you guess output someting to terminal. We will not use <code>$input<\/code> anywhere in our code but we need to implement it because <code>\\Symfony\\Component\\Console\\Command\\Command<\/code> demands it.<\/p>\n<p>If we look into the class <code>IndexerReindexCommand<\/code>, Magento defines <code>$returnValue<\/code> with a constant of <code>Cli::RETURN_FAILURE<\/code>. This will be used on the end by <code>exit<\/code> function. For more information about that function go check: <a href=\"http:\/\/php.net\/manual\/en\/function.exit.php\" rel=\"noopener\" target=\"_blank\">http:\/\/php.net\/manual\/en\/function.exit.php<\/a>.<\/p>\n<p>To get all indexers we have in our Magento installation we simply call the <code>$this->getAllIndexers()<\/code>, located in <code>AbstractIndexerCommand<\/code> class and for each indexer we will check if it is valid or not and reindex it. Simple enough?<\/p>\n<h3>Validate<\/h3>\n<p>Well, we are not quite there yet. What if our indexer is in the middle of a process started by e.g. cron? We need to validate indexer status before doing anything else with him.<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> execute<span class=\"br0\">&#40;<\/span>InputInterface <span class=\"re0\">$input<\/span><span class=\"sy0\">,<\/span> OutputInterface <span class=\"re0\">$output<\/span><span class=\"br0\">&#41;<\/span>\n<span class=\"br0\">&#123;<\/span> <span class=\"re0\">$returnValue<\/span> <span class=\"sy0\">=<\/span> Cli<span class=\"sy0\">::<\/span><span class=\"me2\">RETURN_FAILURE<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">foreach<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getAllIndexers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">as<\/span> <span class=\"re0\">$indexer<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> try <span class=\"br0\">&#123;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">validateIndexerStatus<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$indexer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&nbsp; <span class=\"br0\">&#125;<\/span> catch <span class=\"br0\">&#40;<\/span>LocalizedException <span class=\"re0\">$e<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$e<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getMessage<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> catch <span class=\"br0\">&#40;<\/span>\\Exception <span class=\"re0\">$e<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getTitle<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">' indexer process unknown error:'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$e<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getMessage<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">return<\/span> <span class=\"re0\">$returnValue<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<p>Our <code>validateIndexerStatus<\/code> function will look like this.<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"co4\">\/** * Validate that indexer is not locked or not needed to be reindexed * * @param IndexerInterface $indexer * @return void * @throws LocalizedException *\/<\/span>\n<span class=\"kw2\">private<\/span> <span class=\"kw2\">function<\/span> validateIndexerStatus<span class=\"br0\">&#40;<\/span>IndexerInterface <span class=\"re0\">$indexer<\/span><span class=\"br0\">&#41;<\/span>\n<span class=\"br0\">&#123;<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getStatus<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">==<\/span> StateInterface<span class=\"sy0\">::<\/span><span class=\"me2\">STATUS_WORKING<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"kw1\">throw<\/span> <span class=\"kw2\">new<\/span> LocalizedException<span class=\"br0\">&#40;<\/span> __<span class=\"br0\">&#40;<\/span> <span class=\"st_h\">'%1 index is locked by another reindex process. Skipping.'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getTitle<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">elseif<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getStatus<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">==<\/span> StateInterface<span class=\"sy0\">::<\/span><span class=\"me2\">STATUS_VALID<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"kw1\">throw<\/span> <span class=\"kw2\">new<\/span> LocalizedException<span class=\"br0\">&#40;<\/span> __<span class=\"br0\">&#40;<\/span> <span class=\"st_h\">'%1 index is valid. Skipping.'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getTitle<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span>\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<p>If the indexer have <code>working<\/code> or <code>valid<\/code> status, throw appropriate exceptions which we catch in try block.<br \/>\nNow we can write code that will reindex the indexer <code>$indexer->reindexAll()<\/code> and to get how much time is spent reindexing, we need to add <code>$startTime = microtime(true);<\/code> before the reindex code and this code <code>$resultTime = microtime(true) - $startTime;<\/code> after the reindex.<\/p>\n<h3>End<\/h3>\n<p>For the end, we will output some success message with the time spent.<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span> <span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getTitle<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">' index has been rebuilt successfully in '<\/span> <span class=\"sy0\">.<\/span> <span class=\"kw3\">gmdate<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'H:i:s'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$resultTime<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/code><\/pre>\n<p>This is full <code>execute<\/code> function:<\/p>\n<pre class=\"ish\"><code class=\"language-php\"><span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> execute<span class=\"br0\">&#40;<\/span>InputInterface <span class=\"re0\">$input<\/span><span class=\"sy0\">,<\/span> OutputInterface <span class=\"re0\">$output<\/span><span class=\"br0\">&#41;<\/span>\n<span class=\"br0\">&#123;<\/span> <span class=\"re0\">$returnValue<\/span> <span class=\"sy0\">=<\/span> Cli<span class=\"sy0\">::<\/span><span class=\"me2\">RETURN_FAILURE<\/span><span class=\"sy0\">;<\/span> <span class=\"kw1\">foreach<\/span> <span class=\"br0\">&#40;<\/span><span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getAllIndexers<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">as<\/span> <span class=\"re0\">$indexer<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> try <span class=\"br0\">&#123;<\/span> <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">validateIndexerStatus<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$indexer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&nbsp; <span class=\"re0\">$startTime<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">microtime<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">true<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">reindexAll<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"re0\">$resultTime<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw3\">microtime<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">true<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">-<\/span> <span class=\"re0\">$startTime<\/span><span class=\"sy0\">;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span> <span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getTitle<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">' index has been rebuilt successfully in '<\/span> <span class=\"sy0\">.<\/span> <span class=\"kw3\">gmdate<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'H:i:s'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$resultTime<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&nbsp; <span class=\"re0\">$returnValue<\/span> <span class=\"sy0\">=<\/span> Cli<span class=\"sy0\">::<\/span><span class=\"me2\">RETURN_SUCCESS<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> catch <span class=\"br0\">&#40;<\/span>LocalizedException <span class=\"re0\">$e<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$e<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getMessage<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> catch <span class=\"br0\">&#40;<\/span>\\Exception <span class=\"re0\">$e<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$indexer<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getTitle<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">.<\/span> <span class=\"st_h\">' indexer process unknown error:'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"re0\">$output<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">writeln<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$e<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getMessage<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">return<\/span> <span class=\"re0\">$returnValue<\/span><span class=\"sy0\">;<\/span>\n<span class=\"br0\">&#125;<\/span><\/code><\/pre>\n<p>Let&#8217;s test it if this works. In root Magento dir type <code>bin\/magento indexer:reindex:required<\/code> or just <code>bin\/magento in:re:re<\/code>. You will see a ouputed lines of skipped\/reindexed indexers.<\/p>\n<p>You can check the source code of GitHub <a href=\"https:\/\/github.com\/ivan-veres\/magento2-module-reindex-required\/\">https:\/\/github.com\/ivan-veres\/magento2-module-reindex-required\/<\/a>.<\/p>\n<p>Hope this little tutorial and this module will help someone.<\/p>\n<p>The post <a rel=\"nofollow\" href=\"https:\/\/inchoo.net\/magento-2\/command-reindex-required-indexers\/\">Command to reindex required indexers<\/a> appeared first on <a rel=\"nofollow\" href=\"https:\/\/inchoo.net\">Inchoo<\/a>.<\/p>\n<h1><a target=\"_blank\" href=\"http:\/\/www.circulatetechnology.com\/\">Click here for more informations about top website development services <\/a><\/h1>\n","protected":false},"excerpt":{"rendered":"<p>You are in a hurry and you do not want to manually type indexer codes to reindex? Well sit back and keep reading, you are in for a treat. By default, Magento has these console commands for the indexer indexer indexer:info &#8211; Shows allowed Indexers indexer:reindex &#8211; Reindexes Data indexer:reset &#8211; Resets indexer status to &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[1090,1091,20,1092],"tags":[],"class_list":["post-132271","post","type-post","status-publish","format-standard","","category-indexers","category-indexing","category-magento-2","category-reindex"],"jetpack_publicize_connections":[],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p99pkJ-ypp","_links":{"self":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/posts\/132271"}],"collection":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/comments?post=132271"}],"version-history":[{"count":0,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/posts\/132271\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/media?parent=132271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/categories?post=132271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sushilkumar.ind.in\/blog\/wp-json\/wp\/v2\/tags?post=132271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}