Sites e aplicações

Instalar e atualizar o Magento 2.4 sem Elasticsearch nem OpenSearch

Revisto a 6 min de leitura instalação compatibilidade Magento

Desde a versão 2.4, o Magento eliminou a pesquisa por MySQL que as versões anteriores usavam e exige um motor de pesquisa externo: Elasticsearch ou OpenSearch, consoante a versão (as mais recentes usam o OpenSearch). Pode ver qual pede a sua na tabela de requisitos do Adobe Commerce.

Estes motores são serviços que ficam em execução em segundo plano e precisam de vários GB de memória, pelo que não podem ser instalados num alojamento partilhado como o nosso. Tem dois caminhos:

  • Contratar um serviço gerido de OpenSearch ou Elasticsearch, como o Elastic Cloud ou o Bonsai, e configurar os seus dados de ligação no Magento. É o que a Adobe recomenda, mas implica um custo mensal que, em lojas pequenas ou médias, pode não compensar.
  • Desativar os módulos de Elasticsearch/OpenSearch e usar o MySQL como motor de pesquisa com um módulo gratuito. É o que este guia explica.

Ver que módulos de pesquisa tem a sua versão

Os nomes dos módulos mudam consoante a versão do Magento. Por exemplo, na 2.4.0–2.4.5 existem Magento_Elasticsearch6 e Magento_Elasticsearch7, e nas versões recentes Magento_Elasticsearch8 e Magento_OpenSearch. Para ver os da sua instalação, entre por SSH na pasta do Magento e execute:

php bin/magento module:status | grep -E 'Elasticsearch|OpenSearch'

Use esses nomes nos comandos abaixo.

Instalar o Magento 2.4 sem Elasticsearch

Se instalar o Magento manualmente, indique no setup:install que não ative os módulos do motor de pesquisa com --disable-modules. Numa versão recente:

php bin/magento setup:install \
--disable-modules=Magento_InventoryElasticsearch,Magento_Elasticsearch8,Magento_OpenSearch,Magento_Elasticsearch \
...resto de parámetros de instalación...

No Magento 2.4.0–2.4.5, a lista é Magento_InventoryElasticsearch,Magento_Elasticsearch7,Magento_Elasticsearch6,Magento_Elasticsearch.

Atualizar para o Magento 2.4 sem Elasticsearch

Se atualizar uma loja que não tem motor de pesquisa configurado, o setup:upgrade vai parar com um erro de ligação ao Elasticsearch ou ao OpenSearch. Desative antes os módulos que o module:status lhe mostrou:

php bin/magento module:disable Magento_Elasticsearch \
Magento_Elasticsearch8 \
Magento_OpenSearch \
Magento_InventoryElasticsearch

No Adobe Commerce (a versão paga), acrescente também Magento_ElasticsearchCatalogPermissions. Depois continue a atualização normalmente.

Depois de desativar os módulos, a loja funciona mas não tem pesquisa. Para a recuperar, vamos usar o Legacy MySQL Search da Swissup: um módulo gratuito que recupera no Magento 2.4 a pesquisa por MySQL da 2.3 e que continua a ser mantido (versão 1.1.14).

A partir da pasta do Magento:

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 --safe-mode=1
php bin/magento setup:di:compile
php bin/magento config:set catalog/search/engine 'lmysql'
php bin/magento indexer:reindex catalogsearch_fulltext

Estes comandos instalam o módulo, ativam-no, escolhem o MySQL como motor de pesquisa e voltam a indexar o catálogo. Se a loja estiver em modo de produção, execute depois php bin/magento setup:static-content:deploy es_ES e php bin/magento cache:flush.

Também pode escolher o motor a partir da administração, em Stores > Configuration > Catalog > Catalog > Catalog Search > Search Engine: desmarque Use system value e selecione Legacy MySQL (Deprecated).

Campo Search Engine com o Legacy MySQL selecionado na configuração do Magento

Para verificar o motor ativo:

php bin/magento config:show catalog/search/engine

Deve responder lmysql. Faça uma pesquisa na loja para confirmar que devolve produtos.

Por predefinição, uma pesquisa de várias palavras («mala vermelha») devolve os produtos que contêm qualquer uma delas. Para que apareçam apenas os que têm todas, como com o Elasticsearch, altere Multi-word Search Logic (MySQL Legacy) para AND na mesma secção de Catalog Search e execute php bin/magento cache:clean config.

Outra alternativa: Algolia

O Algolia é um motor de pesquisa externo como serviço, com plano gratuito para catálogos e volumes de pesquisa pequenos. Tem uma extensão oficial para o Magento 2; também exige desativar os módulos de Elasticsearch/OpenSearch, como se explica acima, se não tiver um configurado.

Erros frequentes

  • Falta de memória ao executar o Composer ou o bin/magento («Allowed memory size exhausted»): execute o comando com php -d memory_limit=-1, por exemplo php -d memory_limit=-1 bin/magento setup:di:compile, ou aumente o memory_limit no cPanel.
  • O setup:upgrade falha com «Current version of RDBMS is not supported»: não tem a ver com o motor de pesquisa. O Magento verifica a versão da base de dados e só aceita algumas; por exemplo, o Magento 2.4.8 suporta o MySQL 8.0 e 8.4, e o MariaDB até à 10.6 e à 11.4. Escreva-nos e indicamos-lhe que versão tem o seu servidor.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.