Why OpenSearch: licence, governance, system requirements
OpenSearch is a search service in its own right, created as a community fork of Elasticsearch after Elastic switched its licence from Apache 2.0 to licensing models of its own in 2021. OpenSearch is licensed entirely under Apache 2.0. Since September 2024 the project has been run by the OpenSearch Software Foundation, a project of the Linux Foundation — so its further development does not depend on a single company. Elasticsearch itself follows a different licensing model. That is not a legal assessment of your case, and for running a shop the licence is rarely what triggers the decision. The trigger is usually in the system requirements.
For Magento Open Source and Adobe Commerce, Adobe has made the decision. Version 2.4.9, released on 12 May 2026, supports only OpenSearch 3; Elasticsearch no longer appears in the requirements. 2.4.8 runs with Elasticsearch 8 or OpenSearch 3, 2.4.7 with Elasticsearch 8, OpenSearch 2.19 or 3. For 2.4.6 with current patches, Adobe lists only OpenSearch 2.19 and 3, and for 2.4.4 and 2.4.5 OpenSearch 2.19. Adobe Commerce on Cloud relies exclusively on OpenSearch. And because Magento 2.4 cannot even be installed without a search engine, this affects every shop, not just those with large ranges.
As for OpenSearch itself, 3.x is the current major version, generally available since May 2025; the latest minor release, 3.9.0, came out on 29 September 2026. The 2.x line is maintained with 2.19 until OpenSearch 4.0 is released, and 1.x has reached its end of life. Support for Elasticsearch 7.17 ended on 15 January 2026, and Adobe explicitly recommends moving to a compatible OpenSearch version. One point matters for planning: Adobe supplies no fixes for third-party components such as the search service once they have reached end of life — that is the operator’s job. Whoever runs a shop therefore has to watch the lifecycle of its search engine as closely as that of Magento.
Moving Magento and Adobe Commerce: order, reindex, staging
The move starts with an inventory: Magento version and patch level, search service and version, and any extensions that talk to the search themselves. The order of steps follows from that. A shop on 2.4.7 with Elasticsearch 8 can switch to OpenSearch 3 on its current release and take the Magento updates afterwards. For 2.4.4 and 2.4.5, Adobe lists only OpenSearch 2.19; the route then leads through a Magento version that supports both OpenSearch 2.19 and 3 — that is, 2.4.6 or 2.4.7 — to the switch to OpenSearch 3, and from there on to 2.4.9. Worth knowing: 2.4.8 no longer supports OpenSearch 2.19. Get the order wrong and you pay for a second update window.
Technically, the search index is a copy of the catalogue data, not a data source of its own. So nothing is migrated during the move; the index is rebuilt. The new OpenSearch service runs alongside the old one, Magento is pointed at it, and the indexers rebuild the catalogue index. With large ranges that takes a while, and that is exactly the duration we measure in advance, on a staging system with a copy of the live data. There we check search, suggestions, filters and sorting against the previous state before the live shop switches over. Until the switch-over, the old service keeps serving your customers.
There is more to the move than configuration. Extensions that run their own search queries or extend the index are tested against the new version. Your own search settings, such as synonyms and weightings, are checked after the move against the same test searches as before. The Magento update itself is tested on the same staging system before it goes live — with the search service the live shop will actually use afterwards. The switch-over happens in the agreed maintenance window, with a backup beforehand and a way back in case something is not right. Afterwards we watch the indexers, the error logs and the searches of the first few days. A move is only finished once the list of searches without results has not grown.
Moving Shopware 6: variables, message queue, failure behaviour
In Shopware 6 a search service handles the searches explicitly marked for it — by default the product search, product listings and search suggestions in the Storefront; without a search service, search otherwise runs through the database. OpenSearch is connected through environment variables: OPENSEARCH_URL points to the service, SHOPWARE_ES_ENABLED switches on the search, SHOPWARE_ES_INDEXING_ENABLED the indexing, and SHOPWARE_ES_INDEX_PREFIX keeps the indices of different environments apart. Because search and indexing are switched separately, the new index can be built completely before the Storefront uses it. For the move, that means the new service first runs alongside the old one.
Indexing runs through console commands and the message queue. Commands such as bin/console es:index, es:reset and es:status control and check it; a full rebuild via the queue is started with dal:refresh:index --use-queue. The actual work is done by workers running bin/console messenger:consume. If no workers are running, the index is not kept up to date — the Storefront then shows no error message, just old results. So we set up the workers as permanently running services, monitor the length of the queue and measure on the staging system how long a full index takes for your catalogue.
That leaves the question of what happens when the search service does not respond. SHOPWARE_ES_THROW_EXCEPTION decides: either Shopware throws an exception, or the search falls back to the database. On the staging system we let errors show, so that they get noticed there; in the live shop the fallback is usually the better choice. The search in the Shopware Administration can also use OpenSearch, with settings of its own; whether that is worth it, we decide with you based on the volume of data. Extensions that run their own search queries are tested against the new service. A slower shop sells more than an error page.
Relevance and search quality: what makes good results
A fast search is not yet a good one. Good results come from three things: data that can be searched, rules that reflect the language of your customers, and weighting that puts what matters at the top. Synonyms connect the technical term with everyday language, the abbreviation with the full form. Typo tolerance catches swapped letters but must not turn a part number into a similar product. Weighting decides whether a hit in the part number, in the name or somewhere in the description counts. What mapping and data quality mean for all this is described on our Elasticsearch page; the same applies to OpenSearch.
Filters and facets are the second part of search, and often the more important one. Anyone narrowing down by attributes needs those attributes as structured values, not as running text: sizes, materials, units, written consistently. Facets should show what actually occurs in the result and not offer filters that lead to zero hits. That is why we start with the real search queries from your shop: which terms are searched for, which return nothing, which return the wrong thing? Synonyms, weightings and data maintenance tasks come out of that list. A search does not become good in the configuration but on the list of searches without results.
In B2B, a third level is added: who is allowed to see what. Customer groups, range visibility and customer prices must apply in the result list, the filters and the search suggestions just as they do in the catalogue. There are two ways — rules in the index, or rules applied at query time — and both have a price: a larger index and more indexing, or more computation per query. Which route fits depends on the number of customer groups and how often prices change. This holds for any shop search, whatever service sits behind it. We know how much depends on visibility rules from B2B shops on Shopware 6 such as M&S Armaturen or Diderk Heinje Pflanzenhandel, a plant wholesaler whose prices only appear after registration. A price a customer should not see weighs more than a product they cannot find.
Operation: OpenSearch on our own servers in Germany
A search service is not a plugin you install once. It needs memory and disk space that grow with the catalogue, a version that matches the shop, and someone who keeps an eye on it. At Sharpness, OpenSearch runs on our own servers — Proxmox VE clusters in the Hetzner data centre in Falkenstein, Germany — inside the environment of the shop it belongs to. For Shopware we use it, as we do Valkey or Redis, where catalogue size and load justify it; for Magento always, because Magento cannot do without. A search service does not belong on the open internet; it is reachable only for its own shop. We run Shopware and Magento shops, and with them the services behind them.
Operation includes snapshots, monitoring and updates. Snapshots back up the indices so that, after a failure, the service does not have to wait for a full rebuild; the source remains the shop database, which is backed up with everything else. Monitoring covers the health of the service, memory, response times and the state of indexing — including whether workers and indexers are running. Updates within the OpenSearch major version are applied in the agreed maintenance windows, after a test on the staging system. An update nobody has tested is not a maintenance window but a risk.
Larger steps we plan as a project of their own: the move from OpenSearch 2 to 3, for instance, which Magento 2.4.9 requires and which the 2.x line will need at the latest when 4.0 is released. The process is the same as for the move from Elasticsearch: new service alongside, build the index, check on staging, switch over, retire the old service. After go-live we run and maintain shop and search under a service level agreement: 24, 8 or 4 hours’ response time, booked for a year; the work itself is billed by effort or within the agreed scope. Without an SLA we deal with requests within 48 hours during our business hours, Mon–Thu 9:00–16:00, Fri 9:00–13:00 (CET); on-call cover exists only with an SLA.