Adobe Commerce 2.3 reached end of support in September 2022.

Install and configure Elasticsearch

Elasticsearch overview

Using Elasticsearch as your catalog search solution provides the following benefits:

  • Quick and advanced searches on products in the catalog
  • Support for multiple languages
  • Support for stop words and synonyms
  • Indexing does not impact customers until reindex is completed

Elasticsearch returns search results based on the last generated index until the new one has been completely indexed so there is no disruption to customers.

  • Accurate, performant, and scalable
  • Works well out of the box
  • Easy to horizontally scale
  • Supports real-time data and analysis
  • Can be used as a document-oriented data store
  • Applications in framework beyond search, including reporting, personalization, performance, and storage

Supported versions

As of version 2.3.7, Adobe Commerce supports Elasticsearch 7.9.3 but should work with 7.x. Support for Elasticsearch 6.x has been deprecated. Elasticsearch 2.x and 5.x have reached end-of-life and are no longer supported.

Recommended configuration

The following figure shows our recommended configuration. All of the tasks we discuss assume you have configured your system this way.

The preceding diagram shows:

  • The Magento application and Elasticsearch are installed on different hosts.

    Running on separate hosts is secure, enables Elasticsearch to be scaled, and is necessary for proxying to work. (Clustering Elasticsearch is beyond the scope of this guide but you can find more information in the Elasticsearch clustering documentation.)

  • Each host has its own web server; the web servers do not have to be the same.

    For example, the Magento application can run Apache and Elasticsearch can run nginx.

  • Both web servers use Transport Layer Security (TLS).

Setting up TLS is beyond the scope of our documentation.

Search requests are processed as follows:

  1. A search request from a user is received by the Magento web server, which forwards it to the Elasticsearch server.

    You configure Elasticsearch in the Admin to connect to the proxy’s host and port. We recommend the web server’s SSL port (by default, 443).

  2. The Elasticsearch web server (listening on port 443) proxies the request to the Elasticsearch server (by default, it listens on port 9200).

  3. Access to Elasticsearch is further protected by HTTP Basic authentication.

    For any request to reach Elasticsearch, it must travel over SSL and provide a valid username and password.

  4. Elasticsearch processes the search request.

  5. Communication returns along the same route, with the Elasticsearch web server acting as a secure reverse proxy.

Prerequisites and Elasticsearch

The tasks discussed in this section require the following:

Firewall and SELinux

Please take into account that security-related software (iptables, SELinux, AppArmor etc.) may be configured by default to block communication between subsystems. It may be a good idea to check them in case of problems.

Set up rules for iptables and SELinux

To set up rules to allow communication with the firewall or SELinux enabled, consult the following resources:

Install the Java Software Development Kit (JDK)

To determine if Java is already installed, enter the following command:

java -version

If the message java: command not found displays, you must install the Java SDK as discussed in the next section.

See one of the following sections:

Install the JDK on CentOS

See this article on digitalocean.

Be sure to install the JDK and not the JRE.

yum -y install java-1.8.0-openjdk

Java version 8 might not be available for all operating systems. For example, you can search the list of available packages for Ubuntu.

Install the JDK on Ubuntu

To install JDK 1.8 on Ubuntu, enter the following commands as a user with root privileges:

apt-get -y update
apt-get install -y openjdk-8-jdk

For other options, see Oracle documentation.

Install Elasticsearch

Follow Installing Elasticsearch for your platform-specific steps.

To verify that Elasticsearch is working, enter the following command on the server on which it is running:

curl -XGET '<host>:9200/_cat/health?v&pretty'

A message similar to the following is displayed:

epoch      timestamp cluster       status shards pri relo init unassign pending_tasks
1519701563 03:19:23  elasticsearch green           1         1      0   0    0    0        0             0

Upgrading Elasticsearch

Refer to Upgrading Elasticsearch for full instructions on backing up your data, detecting potential migration issues, and testing upgrades before deploying to production. Depending on your current version of Elasticsearch, a full cluster restart may or may not be required.

Elasticsearch requires JDK 1.8 or higher. See Install the Java Software Development Kit (JDK) to check which version of JDK is installed.

Additional resources

For additional information, see Elasticsearch documentation