Elasticsearch como requisito para instalar y actualizar Magento 2.4.x

Elasticsearch es un motor de base de datos muy potente, capaz de indexar, ordenar y responder con rapidez a consultas sobre millones de datos.

Desde la versión 2.4.x, Magento toma como requisito el sustituir los motores de búsquedas alternativos, como por ejemplo por medio de consultas SQL a MySQL, y sustituirlo en exclusiva por alguna de las versiones de Elasticsearch.

Este cambio es muy controvertido dado que Elasticsearch por sus requisitos técnicos no puede ser instalado en un servicio como el que ofrecemos, debe ser usado en un VPS o dedicado, o haciendo uso de un servicio administrado de Elasticsearch, con los consecuentes sobrecostes en proyectos de tamaño pequeño o medio.

Aunque en este tutorial vamos a tratar la alternativa al uso de Elasticsearch, primero desactivando este y tras esto instalando un motor de búsqueda gratuito similar a la que se venía usando en versiones anteriores de Magento, si optas por utilizar este motor de búsqueda, lo mejor es usar alguno de los servicios gestionados disponibles, entre ellos el propio que ofrece la empresa tras Elasticsearch:

Instalar Magento 2.4.x sin Elasticsearch

La forma más sencilla de instalar Magento 2.4 sin Elasticsearch es por medio de Softaculous, este sistema completará la instalación sin tener en cuenta que Elasticsearch no está funcionando en la máquina.

Si prefieres instalar Magento a mano, tendrás que establecer que una serie de módulos relativos a Elasticsearch sean ignorados durante la instalación por medio del parámetro --disable-modules:

php bin/magento setup:install \
--disable-modules=Magento_InventoryElasticsearch,Magento_Elasticsearch7,Magento_Elasticsearch6,Magento_Elasticsearch

Actualizar a Magento 2.4.x sin Elasticsearch

Para actualizar a Magento 2.4.x sin que nos salte una advertencia respecto a la falta de configuración Elasticsearch, deberemos desactivar los módulos de Elasticsearch que causan la excepción, para ello debemos ejecutar:

php bin/magento module:disable Magento_Elasticsearch \
Magento_Elasticsearch6 \
Magento_Elasticsearch7 \
Magento_ElasticsearchCatalogPermissions

Tras esto podremos proseguir con el proceso de actualización sin recibir errores.

Instalar motor de búsqueda vía MySQL en sustitución de Elasticsearch

Aunque hemos evitado la restricción, en este momento, tanto si has instalado como actualizado, no dispondrías de motor de búsqueda, por suerte diferentes equipos de desarrolladores de la comunidad Magento han creado alternativas en forma de módulos gratuitos.

En este ejemplo nosotros usaremos Legacy Mysql Search de Swissup, el cual mantiene un desarrollo activo, el proceso es tan sencillo como ejecutar los siguientes comandos:

composer config repositories.swissup composer https://docs.swissuplabs.com/packages/
composer require swissup/module-search-mysql-legacy --prefer-source --ignore-platform-reqs
php bin/magento module:enable Swissup_SearchMysqlLegacy Swissup_Core
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento config:set catalog/search/engine 'lmysql'
php bin/magento indexer:reindex catalogsearch_fulltext

Con estos pasos abremos instalado el módulo para búsquedas usando el motor MySQL, habilitado en sustitución de Elasticsearch y finalmente reindexado el catálogo.

Otras alternativas a Elasticsearch

Aunque en este caso hemos expuesto el uso de MySQL como motor de búsqueda, habría muchas opciones alternativas, por ejemplo Algolia, un motor de búsquedas propietario superior a Elasticsearch que se usa por medio del propio servicio que dicha empresa ofrece, con la ventaja de que disponen de planes gratuitos cuando el número de búsquedas y elementos a indexar no es muy alto.

Este motor dispone de plugin oficial para Magento 2.4, con un proceso de instalación similar que implicaría desactivar Elasticsearch.

Problemas comunes

Si durante el proceso recibes errores por falta de memoria, añade tras el comando php, la directiva -d memory_limit=-1, de esa forma no se limitará el límite de memoria, o aumenta memory_limit de forma permanente desde cPanel:

php -d memory_limit=1 bin/magento...