In Magento 2.4.0, we will be removing support for three deprecated catalog search engines: MySQL and Elasticsearch 2.x, 5.x, and 6.x. Merchants must install and configure a supported version of Elasticsearch before they upgrade to Magento 2.4. New installations require a connection to Elasticsearch to complete.
Extension developers must update any module that depends on the unsupported search engines.
IMPORTANT: Prior to upgrading, check your search configuration to ensure you are using a supported search engine for the target version and that it is properly configured. If configuration changes are required, you must make them prior to upgrading.
Supported search engines in Magento 2.4
Upgrading to 2.4.0
You must configure Magento to use a supported search engine prior to upgrading to 2.4.0. During the upgrade process, Magento validates the search engine configuration. It will not proceed if you are using an unsupported search engine or if it cannot connect to an Elasticsearch server.
If MySQL is your search engine in Magento 2.3, use the following resources to help guide you through this process:
If Elasticsearch 2 is your search engine, you must update to a more recent version. See the following resources to update Elasticsearch:
Installing 2.4.0
You must have an Elasticsearch host set-up and configured prior to installing Magento. You will not be able to continue the installation process until you successfully connect to Elasticsearch.
As of Magento 2.4.0, you must install Magento from the command line. The bin/magento setup:install command includes several new flags that configure the connection to Elasticsearch:
Name |
Value |
--search-engine |
The version of Elasticsearch to use as the search engine. Possible values are elasticsearch7 and elasticsearch6. |
--elasticsearch-host |
The host name or IP address where Elasticsearch is running. The default is localhost. |
--elasticsearch-port |
The port for incoming HTTP requests. The default is 9200. |
--elasticsearch-index-prefix |
A prefix that identifies the Elasticsearch index. The default is magento2. |
--elasticsearch-timeout |
The number of seconds before the system times out. The default is 15. |
--elasticsearch-enable-auth |
Enables authentication on the Elasticsearch server. The default is false. |
--elasticsearch-username |
The user ID to authenticate Elasticsearch. |
--elasticsearch-password |
The password to authenticate Elasticsearch. |
If no Elasticsearch flags are provided, Magento uses the default search configuration. The command checks for an Elasticsearch connection. The installation fails if Magento is unable to connect to an Elasticsearch host. If this occurs, check that your Elasticsearch is up and running, and that you have supplied the correct connection parameters.
A sample install command might look like this:
magento setup:install --base-url=http://127.0.0.1/magento2/ \ --db-host=localhost --db-name=magento --db-user=magento --db-password=magento \ --admin-firstname=Magento --admin-lastname=User --admin-email=user@example.com \ --admin-user=admin --admin-password=admin123 --language=en_US \ --currency=USD --timezone=America/Chicago --use-rewrites=1 \ --search-engine=elasticsearch7 --elasticsearch-host=es-host.example.com \ --elasticsearch-port=9200
Third-party search engines
Not all search extensions are created equal. Some search extensions do not replace Magento's search engine, opting to extend the functionality instead. If you are using such a search extension, Elasticsearch is still required.
If you are using a search engine replacement, it is possible to upgrade to 2.4.0 without configuring an Elasticsearch server.
To determine if your search solution replaces Magento's search engine, check the value of the catalog search engine (Stores > Configuration > Catalog > Catalog Search > Search Engine).
If you experience any issues with search, please contact the search extension provider.
Developer notes
The following modules have been refactored to use the ElasticSearchResultApplier class and avoid usage of CatalogSearch SearchResultApplier which was based on mysql:
In addition, the following constructors were modified to provide a mixed type. We have removed deprecated class private and protected components but have left their usages as arguments in the constructor for backwards compatibility.
Note: We recommend that you do not inherit from any Magento class. If your extension does inherit from any of the classes above, make sure it is not using any of the deprecated or removed mixed type class members. For compatibility, modify your constructors accordingly.
The following deprecated interfaces were deleted. If your extension implements any of these interfaces, refactor your code to use the Elasticsearch module.
The following deprecated classes were deleted. If your extension uses any of the above classes, then you must do a major refactor to your code to use the Elasticsearch module, and not rely on MySQL Search class implementations.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.