Console Commands 

Hint

See the Search Index documentation to get a more high-level understanding of the search index concept in the Oro application.

OroWebsiteSearchBundle provides commands to interact with search index.

oro:website-search:reindex 

This command performs reindexation of entities to be included in the storefront search index. It has optional parameters that allows reindexing specific type of entities and/or website.

Reindexation might take long time for a big volume of data, so it would be good idea to run it scheduled (e.g. once a day).

To reindex all entities, use the following command:

$ php bin/console oro:website-search:reindex
Starting reindex task for all mapped entities
Total indexed items: 733

To reindex only a certain website and specific entity, use the –website-id and –class parameters:

$ php bin/console oro:website-search:reindex --website-id=1 --class="Oro\Bundle\UserBundle\Entity\User"

oro:website-search:reindex –scheduled 

Reindexation can also be scheduled to be performed in the background by the Message Queue consumers.

Advantages of this mode:

  • asynchronous

  • can be multithreaded

  • scalable

You will need a configured Message Queue and at least one running consumer worker to use this mode.

Please use the following parameter to run a scheduled, background indexation :

php bin/console oro:website-search:reindex --scheduled

This command will not directly run indexation - it will immediately quit, putting a reindex request to the Queue. The process itself will be performed in the background by the consumers.

In order to smoothly scale indexation of big volumes, we supplied another parameter - product-id, that controls the granulation of reindexation.

You can specify a range of IDs of products to be reindexed, for example:

php bin/console oro:website-search:reindex --scheduled --product-id=1-5000

The parameter also supports ID range splitting.

Let’s assume we have a very large database of 5M products and want to distribute load nicely among a set of 32 message consumers. In order to do this, we could tell the reindexer to split the products between workers in 1000-product sets:

php bin/console oro:website-search:reindex --scheduled --product-id=1-5000000/1000

This command will generate reindex requests with 1000 products per each, thus allowing to split the 5M product pool into 5000 * 1k chunks. This strategy might drastically improve reindexation performance, depending on the amount of available consumers.

If you do not know the exact amount of products in the database, you can use the asterisk instead:

php bin/console oro:website-search:reindex --scheduled --product-id=*/1000