Magento 2.0.18 is the final 2.0.x release. After March 2018, Magento 2.0.x will no longer receive security patches, quality fixes, or documentation updates.
To maintain your site's performance, security, and PCI compliance, upgrade to the latest version of Magento.

Grid search indexing

You should index data for the performance reasons. Indexing is a process of “materializing” complex data in needed scopes to avoid problems of reading it.

Index data can be always re-created from the original data using certain algorithm.

Declarative markup

You can extend the current indexer declaration with an optional <fieldset> element.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="../../Indexer/etc/indexer.xsd">
    <indexer id="some_grid" view_id="some_grid"
             class="Magento\Framework\Indexer\Action\Base"
             primary="first">
        <title translate="true">Catalog Search</title>
        <description translate="true">Rebuild Catalog product fulltext search index</description>
        <fieldset name="first" source="MagentoModule\ServiceClassOrRepositoryClass" provider="?Magento\Indexer\Model\Fieldset\ProductFieldset">
            <!-- @provider -> Dynamic fields resolver -->
            <!-- @source -> source from old declaration -->
            <field name="title_alias"  origin="?title" xsi:type="searchable" dataType="?type_alias">
                <filter class="Magento\Framework\Search\Index\Filter\LowercaseFilter"/>
            </field>
            <field name="identifier" xsi:type="filterable" handler="Magento\Framework\Search\Index\Handler"/>
        </fieldset>
        <fieldset name="second" source="MagentoModule\ServiceClassOrRepositoryClass">
            <reference fieldset="first"  from="id_field" to="second_entity_id" />
            <reference fieldset="first" from="id_field2" to="second_entity_id2" />
            <!-- reference -> from="field from primary fieldset" to="field from current fieldset" -->
            <!-- first we need parse references (from field) after that execute fieldset handlers -->
            <field name="title" xsi:type="filterable"/>
        </fieldset>
 
        <saveHandler class="Magento\Framework\Indexer\SaveHandler\Grid" /><!-- optional --><!-- indexer put API -->
        <structure class="Magento\Framework\Indexer\GridStructure" /><!-- optional --><!-- creating flat table for index (or in other index database) -->
    </indexer>
</config>

Where:

  • fieldset - container for field nodes, which specifies handler for processing nested field nodes.
  • field - concrete field processor.
  • filter - any optional pre-processing of data before getting to index.