You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2022/08/04 02:37:57 UTC

[james-project] 01/03: JAMES-3771 Migrate to opensearch 2.0 and its high level rest java client

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d4655bae7bcf8fc16e9a1fe0f6be997a19d486c0
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Tue Jul 5 13:01:34 2022 +0700

    JAMES-3771 Migrate to opensearch 2.0 and its high level rest java client
---
 .../{elasticsearch-v7 => opensearch}/pom.xml       |  16 +-
 .../james/backends/opensearch}/AliasName.java      |   2 +-
 .../james/backends/opensearch}/ClientProvider.java |  18 +-
 .../opensearch}/DeleteByQueryPerformer.java        |   8 +-
 .../james/backends/opensearch}/DocumentId.java     |   4 +-
 .../opensearch}/ElasticSearchConfiguration.java    |  10 +-
 .../opensearch}/ElasticSearchHealthCheck.java      |   8 +-
 .../backends/opensearch}/ElasticSearchIndexer.java |  26 +--
 .../backends/opensearch}/IndexCreationFactory.java |  26 +--
 .../james/backends/opensearch}/IndexName.java      |   2 +-
 .../opensearch}/ReactorElasticSearchClient.java    |  80 +++----
 .../james/backends/opensearch}/ReadAliasName.java  |   2 +-
 .../james/backends/opensearch}/RoutingKey.java     |   4 +-
 .../opensearch}/UpdatedRepresentation.java         |   4 +-
 .../james/backends/opensearch}/WriteAliasName.java |   2 +-
 .../opensearch}/search/ScrolledSearch.java         |  18 +-
 .../james/backends/opensearch}/AliasNameTest.java  |   2 +-
 ...iderImplConnectionAuthESIgnoreSSLCheckTest.java |  10 +-
 ...ImplConnectionAuthESOverrideTrustStoreTest.java |   6 +-
 .../ClientProviderImplConnectionContract.java      |  12 +-
 .../ClientProviderImplConnectionNoAuthESTest.java  |   5 +-
 .../backends/opensearch}/ClientProviderTest.java   |   2 +-
 .../DockerAuthElasticSearchSingleton.java          |   2 +-
 .../backends/opensearch}/DockerElasticSearch.java  |  18 +-
 .../opensearch}/DockerElasticSearchExtension.java  |   2 +-
 .../opensearch}/DockerElasticSearchRule.java       |   2 +-
 .../opensearch}/DockerElasticSearchSingleton.java  |   2 +-
 .../james/backends/opensearch}/DocumentIdTest.java |   2 +-
 .../opensearch}/ElasticSearchClusterExtension.java |   2 +-
 .../ElasticSearchConfigurationTest.java            |  10 +-
 .../ElasticSearchHealthCheckConnectionTest.java    |   2 +-
 .../opensearch}/ElasticSearchHealthCheckTest.java  |  16 +-
 .../opensearch}/ElasticSearchIndexerTest.java      |  16 +-
 .../opensearch}/IndexCreationFactoryTest.java      |  22 +-
 .../james/backends/opensearch}/RoutingKeyTest.java |   2 +-
 .../opensearch}/search/ScrolledSearchTest.java     |  28 +--
 .../src/test/resources/auth-es/NginxDockerfile     |   0
 .../src/test/resources/auth-es/README.md           |   0
 .../src/test/resources/auth-es/default.crt         |   0
 .../src/test/resources/auth-es/default.key         |   0
 .../src/test/resources/auth-es/nginx-conf/passwd   |   0
 .../auth-es/nginx-conf/reverse_elasticsearch.conf  |   0
 .../src/test/resources/auth-es/server.jks          | Bin
 backends-common/pom.xml                            |   2 +-
 mailbox/opensearch/example_french_index.json       | 247 ---------------------
 mailbox/{elasticsearch-v7 => opensearch}/pom.xml   |  10 +-
 .../ElasticSearchMailboxConfiguration.java         |   8 +-
 .../mailbox/opensearch}/IndexAttachments.java      |   2 +-
 .../opensearch}/MailboxElasticSearchConstants.java |   8 +-
 .../opensearch}/MailboxIdRoutingKeyFactory.java    |   4 +-
 .../opensearch}/MailboxIndexCreationUtil.java      |  14 +-
 .../mailbox/opensearch}/MailboxMappingFactory.java | 191 +++++++---------
 .../ElasticSearchListeningMessageSearchIndex.java  |  44 ++--
 .../james/mailbox/opensearch}/json/EMailer.java    |   2 +-
 .../james/mailbox/opensearch}/json/EMailers.java   |   2 +-
 .../mailbox/opensearch}/json/HeaderCollection.java |   2 +-
 .../mailbox/opensearch}/json/IndexableMessage.java |   4 +-
 .../opensearch}/json/JsonMessageConstants.java     |   2 +-
 .../json/MessageToElasticSearchJson.java           |   4 +-
 .../opensearch}/json/MessageUpdateJson.java        |   2 +-
 .../james/mailbox/opensearch}/json/MimePart.java   |   2 +-
 .../opensearch}/json/MimePartContainerBuilder.java |   2 +-
 .../mailbox/opensearch}/json/MimePartParser.java   |   2 +-
 .../json/RootMimePartContainerBuilder.java         |   2 +-
 .../opensearch}/json/SerializableMessage.java      |   2 +-
 .../james/mailbox/opensearch}/json/Subjects.java   |   2 +-
 .../opensearch}/query/CriterionConverter.java      |  26 +--
 .../opensearch}/query/DateResolutionFormatter.java |   2 +-
 .../mailbox/opensearch}/query/QueryConverter.java  |  12 +-
 .../mailbox/opensearch}/query/SortConverter.java   |  14 +-
 .../opensearch}/search/ElasticSearchSearcher.java  |  24 +-
 .../src/reporting-site/site.xml                    |   0
 .../opensearch}/ElasticSearchIntegrationTest.java  |  28 +--
 .../ElasticSearchMailboxConfigurationTest.java     |   8 +-
 .../MailboxIdRoutingKeyFactoryTest.java            |   4 +-
 ...asticSearchListeningMessageSearchIndexTest.java |  36 +--
 .../mailbox/opensearch}/json/EMailerTest.java      |   2 +-
 .../mailbox/opensearch}/json/EMailersTest.java     |   2 +-
 .../james/mailbox/opensearch}/json/FieldImpl.java  |   2 +-
 .../opensearch}/json/HeaderCollectionTest.java     |   2 +-
 .../opensearch}/json/IndexableMessageTest.java     |   4 +-
 .../json/MessageToElasticSearchJsonTest.java       |   4 +-
 .../mailbox/opensearch}/json/MimePartTest.java     |   2 +-
 .../mailbox/opensearch}/json/SubjectsTest.java     |   2 +-
 .../query/DateResolutionFormatterTest.java         |   2 +-
 .../mailbox/opensearch}/query/SearchQueryTest.java |   2 +-
 .../search/ElasticSearchSearcherTest.java          |  34 +--
 .../src/test/resources/eml/bodyMakeTikaToFail.eml  |   0
 .../test/resources/eml/emailWith3Attachments.eml   |   0
 .../src/test/resources/eml/htmlContent.txt         |   0
 .../src/test/resources/eml/inlined-mixed.eml       |   0
 .../src/test/resources/eml/inlined-mixed.json      |   0
 .../test/resources/eml/mailCustomDateHeader.eml    |   0
 .../test/resources/eml/mailCustomStringHeader.eml  |   0
 .../src/test/resources/eml/mailWithHeaders.eml     |   0
 .../pom.xml                                        |  10 +-
 .../ElasticSearchQuotaConfiguration.java           |   8 +-
 .../opensearch}/ElasticSearchQuotaSearcher.java    |  29 ++-
 .../search/opensearch}/QuotaQueryConverter.java    |  20 +-
 .../QuotaRatioElasticSearchConstants.java          |   8 +-
 .../opensearch}/QuotaRatioMappingFactory.java      |  24 +-
 .../opensearch}/QuotaSearchIndexCreationUtil.java  |  12 +-
 .../search/opensearch}/UserRoutingKeyFactory.java  |   4 +-
 .../events/ElasticSearchQuotaMailboxListener.java  |  12 +-
 .../opensearch}/json/JsonMessageConstants.java     |   2 +-
 .../search/opensearch}/json/QuotaRatioAsJson.java  |   2 +-
 .../json/QuotaRatioToElasticSearchJson.java        |   2 +-
 .../ElasticSearchQuotaConfigurationTest.java       |   8 +-
 ...lasticSearchQuotaSearchTestSystemExtension.java |  14 +-
 .../ElasticSearchQuotaSearcherTest.java            |   2 +-
 .../opensearch}/QuotaQueryConverterTest.java       |  14 +-
 .../opensearch}/UserRoutingKeyFactoryTest.java     |   4 +-
 .../ElasticSearchQuotaMailboxListenerTest.java     |  28 +--
 .../opensearch}/json/QuotaRatioAsJsonTest.java     |   2 +-
 .../json/QuotaRatioToElasticSearchJsonTest.java    |   2 +-
 .../src/test/resources/quotaRatio.json             |   0
 .../src/test/resources/quotaRatioNoDomain.json     |   0
 mailbox/pom.xml                                    |   5 +-
 mpt/impl/imap-mailbox/elasticsearch/pom.xml        |  10 +-
 .../host/ElasticSearchHostSystem.java              |  28 +--
 mpt/impl/smtp/cassandra-pulsar/pom.xml             |   2 +-
 .../smtp/cassandra-rabbitmq-object-storage/pom.xml |   2 +-
 mpt/impl/smtp/cassandra/pom.xml                    |   2 +-
 pom.xml                                            |  30 +--
 server/apps/cassandra-app/pom.xml                  |   4 +-
 .../apache/james/DockerElasticSearchExtension.java |   6 +-
 .../org/apache/james/DockerElasticSearchRule.java  |   4 +-
 .../test/java/org/apache/james/ESReporterTest.java |  10 +-
 ...esWithNonCompatibleElasticSearchServerTest.java |   4 +-
 .../modules/TestDockerElasticSearchModule.java     |   4 +-
 .../docs/modules/ROOT/pages/operate/guide.adoc     |   2 +-
 server/apps/distributed-app/pom.xml                |   4 +-
 server/apps/distributed-pop3-app/pom.xml           |   4 +-
 server/apps/scaling-pulsar-smtp/pom.xml            |   4 +-
 .../apache/james/DockerElasticSearchExtension.java |   6 +-
 .../org/apache/james/DockerElasticSearchRule.java  |   4 +-
 .../modules/TestDockerElasticSearchModule.java     |   4 +-
 server/container/guice/cassandra/pom.xml           |   2 +-
 server/container/guice/elasticsearch/pom.xml       |   4 +-
 .../modules/mailbox/ElasticSearchClientModule.java |  12 +-
 .../mailbox/ElasticSearchMailboxModule.java        |  26 +--
 .../mailbox/ElasticSearchQuotaSearcherModule.java  |  18 +-
 .../modules/mailbox/ElasticSearchStartUpCheck.java |  10 +-
 .../mailbox/ElasticSearchMailboxModuleTest.java    |   2 +-
 .../metrics/metrics-es-reporter-v7/pom.xml         |   4 +-
 .../metric/es/v7/DockerElasticSearchExtension.java |   2 +-
 .../apache/james/metric/es/v7/ES2ReporterTest.java |   2 +-
 .../apache/james/metric/es/v7/ES6ReporterTest.java |   2 +-
 .../apache/james/metric/es/v7/ES7ReporterTest.java |   2 +-
 .../james/metric/es/v7/ESReporterContract.java     |   2 +-
 .../pom.xml                                        |   2 +-
 .../pom.xml                                        |   2 +-
 .../DistributedThreadGetMethodTest.java            |  20 +-
 .../distributed-webadmin-integration-test/pom.xml  |   2 +-
 ...RabbitMQReindexingWithEventDeadLettersTest.java |   2 +-
 .../webadmin-integration-test-common/pom.xml       |   2 +-
 server/protocols/webadmin/webadmin-mailbox/pom.xml |  14 +-
 .../routes/ElasticSearchQuotaSearchExtension.java  |  22 +-
 .../james/webadmin/routes/MailboxesRoutesTest.java |  24 +-
 .../webadmin/routes/UserMailboxesRoutesTest.java   |  24 +-
 .../java/org/apache/james/util/docker/Images.java  |   1 +
 .../server/manage-guice-distributed-james.md       |   2 +-
 162 files changed, 714 insertions(+), 1002 deletions(-)

diff --git a/backends-common/elasticsearch-v7/pom.xml b/backends-common/opensearch/pom.xml
similarity index 89%
rename from backends-common/elasticsearch-v7/pom.xml
rename to backends-common/opensearch/pom.xml
index abeeee5789..6aa2231aaa 100644
--- a/backends-common/elasticsearch-v7/pom.xml
+++ b/backends-common/opensearch/pom.xml
@@ -25,8 +25,8 @@
         <version>3.8.0-SNAPSHOT</version>
     </parent>
 
-    <artifactId>apache-james-backends-es-v7</artifactId>
-    <name>Apache James :: Backends Common :: ES-V7</name>
+    <artifactId>apache-james-backends-opensearch</artifactId>
+    <name>Apache James :: Backends Common :: OpenSearch</name>
 
     <dependencies>
         <dependency>
@@ -85,15 +85,9 @@
             <artifactId>awaitility</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.elasticsearch.client</groupId>
-            <artifactId>elasticsearch-rest-high-level-client</artifactId>
-            <version>7.10.2</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>commons-logging</groupId>
-                    <artifactId>commons-logging</artifactId>
-                </exclusion>
-            </exclusions>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>opensearch-rest-high-level-client</artifactId>
+            <version>2.0.0</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/AliasName.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/AliasName.java
similarity index 97%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/AliasName.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/AliasName.java
index bcd57642be..c235fb91f5 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/AliasName.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/AliasName.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.Objects;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ClientProvider.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ClientProvider.java
similarity index 92%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ClientProvider.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ClientProvider.java
index 3ece144efc..11c3eeed38 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ClientProvider.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ClientProvider.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.io.IOException;
 import java.security.KeyManagementException;
@@ -44,13 +44,9 @@ import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
 import org.apache.http.ssl.SSLContextBuilder;
 import org.apache.http.ssl.TrustStrategy;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.HostScheme;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.HostNameVerifier;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLValidationStrategy;
 import org.apache.james.util.concurrent.NamedThreadFactory;
-import org.elasticsearch.client.RestClient;
-import org.elasticsearch.client.RestHighLevelClient;
+import org.opensearch.client.RestClient;
+import org.opensearch.client.RestHighLevelClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -85,7 +81,7 @@ public class ClientProvider implements Provider<ReactorElasticSearchClient> {
         }
 
         private void configureHostScheme(HttpAsyncClientBuilder builder) {
-            HostScheme scheme = configuration.getHostScheme();
+            ElasticSearchConfiguration.HostScheme scheme = configuration.getHostScheme();
 
             switch (scheme) {
                 case HTTP:
@@ -118,7 +114,7 @@ public class ClientProvider implements Provider<ReactorElasticSearchClient> {
 
             SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
 
-            SSLValidationStrategy strategy = configuration.getSslConfiguration()
+            ElasticSearchConfiguration.SSLConfiguration.SSLValidationStrategy strategy = configuration.getSslConfiguration()
                 .getStrategy();
 
             switch (strategy) {
@@ -137,7 +133,7 @@ public class ClientProvider implements Provider<ReactorElasticSearchClient> {
         }
 
         private HostnameVerifier hostnameVerifier() {
-            HostNameVerifier hostnameVerifier = configuration.getSslConfiguration()
+            ElasticSearchConfiguration.SSLConfiguration.HostNameVerifier hostnameVerifier = configuration.getSslConfiguration()
                 .getHostNameVerifier();
 
             switch (hostnameVerifier) {
@@ -162,7 +158,7 @@ public class ClientProvider implements Provider<ReactorElasticSearchClient> {
         private SSLContextBuilder applyTrustStore(SSLContextBuilder sslContextBuilder) throws CertificateException, NoSuchAlgorithmException,
             KeyStoreException, IOException {
 
-            SSLTrustStore trustStore = configuration.getSslConfiguration()
+            ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore trustStore = configuration.getSslConfiguration()
                 .getTrustStore()
                 .orElseThrow(() -> new IllegalStateException("SSLTrustStore cannot to be empty"));
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/DeleteByQueryPerformer.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DeleteByQueryPerformer.java
similarity index 90%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/DeleteByQueryPerformer.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DeleteByQueryPerformer.java
index 448c71bbd6..14846851bd 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/DeleteByQueryPerformer.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DeleteByQueryPerformer.java
@@ -17,11 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.reindex.DeleteByQueryRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.reindex.DeleteByQueryRequest;
 
 import reactor.core.publisher.Mono;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/DocumentId.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DocumentId.java
similarity index 95%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/DocumentId.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DocumentId.java
index 9ef6411167..42f650b03b 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/DocumentId.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DocumentId.java
@@ -17,11 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.Objects;
 
-import org.elasticsearch.common.Strings;
+import org.opensearch.common.Strings;
 
 import com.google.common.base.Preconditions;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchConfiguration.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchConfiguration.java
similarity index 98%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchConfiguration.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchConfiguration.java
index 0292403554..edee7fd316 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchConfiguration.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchConfiguration.java
@@ -17,9 +17,9 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
-import static org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLValidationStrategy.OVERRIDE;
+import static org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration.SSLValidationStrategy.OVERRIDE;
 
 import java.io.File;
 import java.nio.file.Files;
@@ -35,9 +35,9 @@ import java.util.stream.Stream;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.HostNameVerifier;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLValidationStrategy;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration.HostNameVerifier;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration.SSLValidationStrategy;
 import org.apache.james.util.Host;
 
 import com.google.common.annotations.VisibleForTesting;
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheck.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheck.java
similarity index 92%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheck.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheck.java
index 335f0275d6..a2b51cf65c 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheck.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheck.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.io.IOException;
 import java.util.Set;
@@ -28,9 +28,9 @@ import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.core.healthcheck.ComponentName;
 import org.apache.james.core.healthcheck.HealthCheck;
 import org.apache.james.core.healthcheck.Result;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
-import org.elasticsearch.client.Requests;
+import org.opensearch.action.admin.cluster.health.ClusterHealthRequest;
+import org.opensearch.action.admin.cluster.health.ClusterHealthResponse;
+import org.opensearch.client.Requests;
 
 import com.google.common.annotations.VisibleForTesting;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchIndexer.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchIndexer.java
similarity index 88%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchIndexer.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchIndexer.java
index 552f555f33..b3e59e4a05 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ElasticSearchIndexer.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ElasticSearchIndexer.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.List;
 
 import org.apache.commons.lang3.StringUtils;
-import org.elasticsearch.action.bulk.BulkRequest;
-import org.elasticsearch.action.bulk.BulkResponse;
-import org.elasticsearch.action.delete.DeleteRequest;
-import org.elasticsearch.action.get.GetRequest;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.index.IndexResponse;
-import org.elasticsearch.action.update.UpdateRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.common.ValidationException;
-import org.elasticsearch.common.xcontent.XContentType;
-import org.elasticsearch.index.query.QueryBuilder;
+import org.opensearch.action.bulk.BulkRequest;
+import org.opensearch.action.bulk.BulkResponse;
+import org.opensearch.action.delete.DeleteRequest;
+import org.opensearch.action.get.GetRequest;
+import org.opensearch.action.get.GetResponse;
+import org.opensearch.action.index.IndexRequest;
+import org.opensearch.action.index.IndexResponse;
+import org.opensearch.action.update.UpdateRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.common.ValidationException;
+import org.opensearch.common.xcontent.XContentType;
+import org.opensearch.index.query.QueryBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexCreationFactory.java
similarity index 94%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexCreationFactory.java
index 832f51fcf6..d5b0dbc0be 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexCreationFactory.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexCreationFactory.java
@@ -17,10 +17,10 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
-import static org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActions;
-import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+import static org.opensearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActions;
+import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -31,15 +31,15 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.elasticsearch.ElasticsearchStatusException;
-import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
-import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.client.indices.CreateIndexRequest;
-import org.elasticsearch.client.indices.GetIndexRequest;
-import org.elasticsearch.common.Strings;
-import org.elasticsearch.common.xcontent.XContentBuilder;
-import org.elasticsearch.common.xcontent.XContentType;
+import org.opensearch.OpenSearchStatusException;
+import org.opensearch.action.admin.indices.alias.IndicesAliasesRequest;
+import org.opensearch.action.admin.indices.alias.get.GetAliasesRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.client.indices.CreateIndexRequest;
+import org.opensearch.client.indices.GetIndexRequest;
+import org.opensearch.common.Strings;
+import org.opensearch.common.xcontent.XContentBuilder;
+import org.opensearch.common.xcontent.XContentType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -217,7 +217,7 @@ public class IndexCreationFactory {
                         request,
                         RequestOptions.DEFAULT);
                 }
-            } catch (ElasticsearchStatusException exception) {
+            } catch (OpenSearchStatusException exception) {
                 if (exception.getMessage().contains(INDEX_ALREADY_EXISTS_EXCEPTION_MESSAGE)) {
                     LOGGER.info("Index [{}] already exists", indexName.getValue());
                 } else {
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexName.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexName.java
similarity index 97%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexName.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexName.java
index b95cc15a74..19d307bab1 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/IndexName.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexName.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.Objects;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ReactorElasticSearchClient.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReactorElasticSearchClient.java
similarity index 72%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ReactorElasticSearchClient.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReactorElasticSearchClient.java
index c2cff10cbb..8f30539cfa 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ReactorElasticSearchClient.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReactorElasticSearchClient.java
@@ -17,50 +17,50 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.io.IOException;
 import java.util.function.Consumer;
 
-import org.elasticsearch.action.ActionListener;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
-import org.elasticsearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
-import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptRequest;
-import org.elasticsearch.action.admin.cluster.storedscripts.GetStoredScriptResponse;
-import org.elasticsearch.action.bulk.BulkRequest;
-import org.elasticsearch.action.bulk.BulkResponse;
-import org.elasticsearch.action.delete.DeleteRequest;
-import org.elasticsearch.action.delete.DeleteResponse;
-import org.elasticsearch.action.explain.ExplainRequest;
-import org.elasticsearch.action.explain.ExplainResponse;
-import org.elasticsearch.action.fieldcaps.FieldCapabilitiesRequest;
-import org.elasticsearch.action.fieldcaps.FieldCapabilitiesResponse;
-import org.elasticsearch.action.get.GetRequest;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.index.IndexResponse;
-import org.elasticsearch.action.search.ClearScrollRequest;
-import org.elasticsearch.action.search.ClearScrollResponse;
-import org.elasticsearch.action.search.MultiSearchRequest;
-import org.elasticsearch.action.search.MultiSearchResponse;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.search.SearchScrollRequest;
-import org.elasticsearch.action.support.master.AcknowledgedResponse;
-import org.elasticsearch.client.IndicesClient;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.client.RestClient;
-import org.elasticsearch.client.RestHighLevelClient;
-import org.elasticsearch.client.core.MainResponse;
-import org.elasticsearch.index.rankeval.RankEvalRequest;
-import org.elasticsearch.index.rankeval.RankEvalResponse;
-import org.elasticsearch.index.reindex.BulkByScrollResponse;
-import org.elasticsearch.index.reindex.DeleteByQueryRequest;
-import org.elasticsearch.script.mustache.MultiSearchTemplateRequest;
-import org.elasticsearch.script.mustache.MultiSearchTemplateResponse;
-import org.elasticsearch.script.mustache.SearchTemplateRequest;
-import org.elasticsearch.script.mustache.SearchTemplateResponse;
+import org.opensearch.action.ActionListener;
+import org.opensearch.action.admin.cluster.health.ClusterHealthRequest;
+import org.opensearch.action.admin.cluster.health.ClusterHealthResponse;
+import org.opensearch.action.admin.cluster.storedscripts.DeleteStoredScriptRequest;
+import org.opensearch.action.admin.cluster.storedscripts.GetStoredScriptRequest;
+import org.opensearch.action.admin.cluster.storedscripts.GetStoredScriptResponse;
+import org.opensearch.action.bulk.BulkRequest;
+import org.opensearch.action.bulk.BulkResponse;
+import org.opensearch.action.delete.DeleteRequest;
+import org.opensearch.action.delete.DeleteResponse;
+import org.opensearch.action.explain.ExplainRequest;
+import org.opensearch.action.explain.ExplainResponse;
+import org.opensearch.action.fieldcaps.FieldCapabilitiesRequest;
+import org.opensearch.action.fieldcaps.FieldCapabilitiesResponse;
+import org.opensearch.action.get.GetRequest;
+import org.opensearch.action.get.GetResponse;
+import org.opensearch.action.index.IndexRequest;
+import org.opensearch.action.index.IndexResponse;
+import org.opensearch.action.search.ClearScrollRequest;
+import org.opensearch.action.search.ClearScrollResponse;
+import org.opensearch.action.search.MultiSearchRequest;
+import org.opensearch.action.search.MultiSearchResponse;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.action.search.SearchResponse;
+import org.opensearch.action.search.SearchScrollRequest;
+import org.opensearch.action.support.master.AcknowledgedResponse;
+import org.opensearch.client.IndicesClient;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.client.RestClient;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.client.core.MainResponse;
+import org.opensearch.index.rankeval.RankEvalRequest;
+import org.opensearch.index.rankeval.RankEvalResponse;
+import org.opensearch.index.reindex.BulkByScrollResponse;
+import org.opensearch.index.reindex.DeleteByQueryRequest;
+import org.opensearch.script.mustache.MultiSearchTemplateRequest;
+import org.opensearch.script.mustache.MultiSearchTemplateResponse;
+import org.opensearch.script.mustache.SearchTemplateRequest;
+import org.opensearch.script.mustache.SearchTemplateResponse;
 
 import reactor.core.publisher.Mono;
 import reactor.core.publisher.MonoSink;
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ReadAliasName.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReadAliasName.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ReadAliasName.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReadAliasName.java
index ad460a2cac..5285c87fb2 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/ReadAliasName.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReadAliasName.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 public class ReadAliasName extends AliasName {
     public ReadAliasName(String value) {
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/RoutingKey.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/RoutingKey.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/RoutingKey.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/RoutingKey.java
index fa84d759df..bb823f8e9f 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/RoutingKey.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/RoutingKey.java
@@ -17,11 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.Objects;
 
-import org.elasticsearch.common.Strings;
+import org.opensearch.common.Strings;
 
 import com.google.common.base.Preconditions;
 
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/UpdatedRepresentation.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/UpdatedRepresentation.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/UpdatedRepresentation.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/UpdatedRepresentation.java
index 0b57dabe57..f221ccd45c 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/UpdatedRepresentation.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/UpdatedRepresentation.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.Objects;
 
-import org.elasticsearch.common.Strings;
+import org.opensearch.common.Strings;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/WriteAliasName.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/WriteAliasName.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/WriteAliasName.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/WriteAliasName.java
index 5423d33736..7aeabe3d91 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/WriteAliasName.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/WriteAliasName.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 public class WriteAliasName extends AliasName {
     public WriteAliasName(String value) {
diff --git a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/search/ScrolledSearch.java b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/search/ScrolledSearch.java
similarity index 89%
rename from backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/search/ScrolledSearch.java
rename to backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/search/ScrolledSearch.java
index 3ca54ab0af..cf50ff30a8 100644
--- a/backends-common/elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7/search/ScrolledSearch.java
+++ b/backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/search/ScrolledSearch.java
@@ -17,20 +17,20 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7.search;
+package org.apache.james.backends.opensearch.search;
 
 import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Consumer;
 
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
-import org.elasticsearch.action.search.ClearScrollRequest;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.search.SearchScrollRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.search.SearchHit;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
+import org.opensearch.action.search.ClearScrollRequest;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.action.search.SearchResponse;
+import org.opensearch.action.search.SearchScrollRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.common.unit.TimeValue;
+import org.opensearch.search.SearchHit;
 
 import com.github.fge.lambdas.Throwing;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/AliasNameTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/AliasNameTest.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/AliasNameTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/AliasNameTest.java
index 74fae92236..6a0760a64a 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/AliasNameTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/AliasNameTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
similarity index 85%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
index 79536f1b88..8b147072a2 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
@@ -17,20 +17,18 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
-
-import static org.apache.james.backends.es.v7.ElasticSearchClusterExtension.ElasticSearchCluster;
+package org.apache.james.backends.opensearch;
 
 import java.util.Optional;
 
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.HostScheme;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.HostScheme;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 class ClientProviderImplConnectionAuthESIgnoreSSLCheckTest implements ClientProviderImplConnectionContract {
 
     @RegisterExtension
-    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchCluster(
+    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchClusterExtension.ElasticSearchCluster(
         DockerAuthElasticSearchSingleton.INSTANCE,
         new DockerElasticSearch.WithAuth()));
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
similarity index 90%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
index cecb77503d..fbca0b80f0 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
@@ -17,12 +17,12 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.Optional;
 
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 public class ClientProviderImplConnectionAuthESOverrideTrustStoreTest implements ClientProviderImplConnectionContract {
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionContract.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionContract.java
similarity index 90%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionContract.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionContract.java
index 26b2cf6a81..260ae2c8d7 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionContract.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionContract.java
@@ -17,16 +17,16 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.concurrent.TimeUnit;
 
-import org.apache.james.backends.es.v7.ElasticSearchClusterExtension.ElasticSearchCluster;
+import org.apache.james.backends.opensearch.ElasticSearchClusterExtension.ElasticSearchCluster;
 import org.awaitility.Awaitility;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionNoAuthESTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionNoAuthESTest.java
similarity index 89%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionNoAuthESTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionNoAuthESTest.java
index cca2d8fd1d..03ceda7409 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderImplConnectionNoAuthESTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionNoAuthESTest.java
@@ -17,15 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
-import org.apache.james.backends.es.v7.ElasticSearchClusterExtension.ElasticSearchCluster;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
 class ClientProviderImplConnectionNoAuthESTest implements ClientProviderImplConnectionContract {
 
     @RegisterExtension
-    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchCluster(
+    static ElasticSearchClusterExtension extension = new ElasticSearchClusterExtension(new ElasticSearchClusterExtension.ElasticSearchCluster(
         DockerElasticSearchSingleton.INSTANCE,
         new DockerElasticSearch.NoAuth()));
 }
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderTest.java
similarity index 97%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderTest.java
index 31e098389b..78008b28c6 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ClientProviderTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerAuthElasticSearchSingleton.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerAuthElasticSearchSingleton.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerAuthElasticSearchSingleton.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerAuthElasticSearchSingleton.java
index 48b52df094..ebf60c8d41 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerAuthElasticSearchSingleton.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerAuthElasticSearchSingleton.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 public class DockerAuthElasticSearchSingleton {
     public static DockerElasticSearch INSTANCE = new DockerElasticSearch.WithAuth();
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearch.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearch.java
similarity index 94%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearch.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearch.java
index de5e5921c1..2f37b8820a 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearch.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearch.java
@@ -17,10 +17,10 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
-import static org.apache.james.backends.es.v7.DockerElasticSearch.Fixture.ES_HTTP_PORT;
-import static org.apache.james.backends.es.v7.DockerElasticSearch.Fixture.ES_MEMORY;
+import static org.apache.james.backends.opensearch.DockerElasticSearch.Fixture.ES_HTTP_PORT;
+import static org.apache.james.backends.opensearch.DockerElasticSearch.Fixture.ES_MEMORY;
 
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -37,8 +37,8 @@ import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
 
 import org.apache.http.HttpStatus;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.Credential;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.HostScheme;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.Credential;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.HostScheme;
 import org.apache.james.util.Host;
 import org.apache.james.util.docker.DockerContainer;
 import org.apache.james.util.docker.Images;
@@ -136,16 +136,18 @@ public interface DockerElasticSearch {
                 .withTmpFs(ImmutableMap.of("/usr/share/elasticsearch/data", "rw,size=200m"))
                 .withExposedPorts(ES_HTTP_PORT)
                 .withEnv("discovery.type", "single-node")
+                .withEnv("DISABLE_INSTALL_DEMO_CONFIG", "true")
+                .withEnv("DISABLE_SECURITY_PLUGIN", "true")
                 .withEnv("ES_JAVA_OPTS", "-Xms" + ES_MEMORY + "m -Xmx" + ES_MEMORY + "m")
                 .withAffinityToContainer()
-                .withName("james-testing-elasticsearch-" + UUID.randomUUID())
+                .withName("james-testing-opensearch-" + UUID.randomUUID())
                 .waitingFor(new HostPortWaitStrategy().withRateLimiter(RateLimiters.TWENTIES_PER_SECOND));
         }
 
         private final DockerContainer eSContainer;
 
         public NoAuth() {
-            this(Images.ELASTICSEARCH_7);
+            this(Images.OPENSEARCH);
         }
 
         public NoAuth(String imageName) {
@@ -206,7 +208,7 @@ public interface DockerElasticSearch {
         private final Network network;
 
         public WithAuth() {
-            this(Images.ELASTICSEARCH_7);
+            this(Images.OPENSEARCH);
         }
 
         WithAuth(String imageName) {
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchExtension.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchExtension.java
similarity index 98%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchExtension.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchExtension.java
index c913849aad..0e0914c0c2 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchExtension.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchExtension.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchRule.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchRule.java
similarity index 97%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchRule.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchRule.java
index 3df5f4c590..f4fdbbc461 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchRule.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchRule.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import org.junit.rules.ExternalResource;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchSingleton.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchSingleton.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchSingleton.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchSingleton.java
index 89b87e33d0..7b5a2a174e 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DockerElasticSearchSingleton.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerElasticSearchSingleton.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 public class DockerElasticSearchSingleton {
     public static DockerElasticSearch INSTANCE = new DockerElasticSearch.NoAuth();
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DocumentIdTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DocumentIdTest.java
similarity index 97%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DocumentIdTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DocumentIdTest.java
index 712495bf15..458933e863 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/DocumentIdTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DocumentIdTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchClusterExtension.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchClusterExtension.java
similarity index 98%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchClusterExtension.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchClusterExtension.java
index 1f2d9f85aa..3c2fbbba1e 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchClusterExtension.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchClusterExtension.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import java.util.List;
 import java.util.function.Function;
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchConfigurationTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchConfigurationTest.java
similarity index 98%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchConfigurationTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchConfigurationTest.java
index 964b0d6e7b..c1be0aff81 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchConfigurationTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchConfigurationTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -27,10 +27,10 @@ import java.util.Optional;
 import org.apache.commons.configuration2.PropertiesConfiguration;
 import org.apache.commons.configuration2.convert.DefaultListDelimiterHandler;
 import org.apache.commons.configuration2.ex.ConfigurationException;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.Credential;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.HostScheme;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.Credential;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.HostScheme;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration.SSLConfiguration.SSLTrustStore;
 import org.apache.james.util.Host;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheckConnectionTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheckConnectionTest.java
similarity index 98%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheckConnectionTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheckConnectionTest.java
index 01d26ce0d4..0296ed19ed 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheckConnectionTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheckConnectionTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheckTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheckTest.java
similarity index 87%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheckTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheckTest.java
index 4f94cd4f8c..5242501472 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchHealthCheckTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchHealthCheckTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
-import org.elasticsearch.cluster.ClusterName;
-import org.elasticsearch.cluster.ClusterState;
-import org.elasticsearch.cluster.block.ClusterBlocks;
-import org.elasticsearch.cluster.health.ClusterHealthStatus;
-import org.elasticsearch.cluster.node.DiscoveryNodes;
-import org.elasticsearch.cluster.routing.RoutingTable;
+import org.opensearch.action.admin.cluster.health.ClusterHealthResponse;
+import org.opensearch.cluster.ClusterName;
+import org.opensearch.cluster.ClusterState;
+import org.opensearch.cluster.block.ClusterBlocks;
+import org.opensearch.cluster.health.ClusterHealthStatus;
+import org.opensearch.cluster.node.DiscoveryNodes;
+import org.opensearch.cluster.routing.RoutingTable;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchIndexerTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchIndexerTest.java
similarity index 96%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchIndexerTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchIndexerTest.java
index c8eea3a64e..e57ea95d2e 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/ElasticSearchIndexerTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ElasticSearchIndexerTest.java
@@ -17,25 +17,25 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS;
-import static org.elasticsearch.index.query.QueryBuilders.termQuery;
+import static org.opensearch.index.query.QueryBuilders.termQuery;
 
 import java.io.IOException;
 
 import org.awaitility.Awaitility;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.get.GetResponse;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/IndexCreationFactoryTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/IndexCreationFactoryTest.java
similarity index 92%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/IndexCreationFactoryTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/IndexCreationFactoryTest.java
index 5a17a4679a..e7c4d77d88 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/IndexCreationFactoryTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/IndexCreationFactoryTest.java
@@ -17,20 +17,20 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
-import static org.apache.james.backends.es.v7.IndexCreationFactory.ANALYZER;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.TOKENIZER;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.TYPE;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.ANALYZER;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.TOKENIZER;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.TYPE;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 import java.util.Optional;
 
-import org.apache.james.backends.es.v7.IndexCreationFactory.IndexCreationCustomElement;
-import org.elasticsearch.ElasticsearchStatusException;
-import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.apache.james.backends.opensearch.IndexCreationFactory.IndexCreationCustomElement;
+import org.opensearch.OpenSearchStatusException;
+import org.opensearch.common.xcontent.XContentBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -162,7 +162,7 @@ class IndexCreationFactoryTest {
                     "    }" +
                     "}"))
                 .createIndexAndAliases(client))
-            .isInstanceOf(ElasticsearchStatusException.class);
+            .isInstanceOf(OpenSearchStatusException.class);
     }
 
     @Test
@@ -192,7 +192,7 @@ class IndexCreationFactoryTest {
                     "        }" +
                     "      }"))
                 .createIndexAndAliases(client))
-            .isInstanceOf(ElasticsearchStatusException.class);
+            .isInstanceOf(OpenSearchStatusException.class);
     }
 
     @Test
@@ -232,7 +232,7 @@ class IndexCreationFactoryTest {
                 .useIndex(INDEX_NAME)
                 .addAlias(ALIAS_NAME)
                 .createIndexAndAliases(client, Optional.of(getInvalidIndexSetting()), Optional.empty()))
-            .isInstanceOf(ElasticsearchStatusException.class);
+            .isInstanceOf(OpenSearchStatusException.class);
     }
 
 }
\ No newline at end of file
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/RoutingKeyTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/RoutingKeyTest.java
similarity index 97%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/RoutingKeyTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/RoutingKeyTest.java
index 043e3b5292..3d7b18b52a 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/RoutingKeyTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/RoutingKeyTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7;
+package org.apache.james.backends.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
diff --git a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/search/ScrolledSearchTest.java
similarity index 89%
rename from backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java
rename to backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/search/ScrolledSearchTest.java
index 9249c384d0..273d1aa682 100644
--- a/backends-common/elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7/search/ScrolledSearchTest.java
+++ b/backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/search/ScrolledSearchTest.java
@@ -17,28 +17,28 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.es.v7.search;
+package org.apache.james.backends.opensearch.search;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.awaitility.Awaitility.await;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.IndexCreationFactory;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
-import org.apache.james.backends.es.v7.ReadAliasName;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.IndexCreationFactory;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ReadAliasName;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.index.IndexRequest;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.index.IndexRequest;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.common.unit.TimeValue;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.SearchHit;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/NginxDockerfile b/backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/NginxDockerfile
rename to backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/README.md b/backends-common/opensearch/src/test/resources/auth-es/README.md
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/README.md
rename to backends-common/opensearch/src/test/resources/auth-es/README.md
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/default.crt b/backends-common/opensearch/src/test/resources/auth-es/default.crt
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/default.crt
rename to backends-common/opensearch/src/test/resources/auth-es/default.crt
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/default.key b/backends-common/opensearch/src/test/resources/auth-es/default.key
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/default.key
rename to backends-common/opensearch/src/test/resources/auth-es/default.key
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/nginx-conf/passwd b/backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/nginx-conf/passwd
rename to backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf b/backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
rename to backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
diff --git a/backends-common/elasticsearch-v7/src/test/resources/auth-es/server.jks b/backends-common/opensearch/src/test/resources/auth-es/server.jks
similarity index 100%
rename from backends-common/elasticsearch-v7/src/test/resources/auth-es/server.jks
rename to backends-common/opensearch/src/test/resources/auth-es/server.jks
diff --git a/backends-common/pom.xml b/backends-common/pom.xml
index 00defbb168..f8392c935d 100644
--- a/backends-common/pom.xml
+++ b/backends-common/pom.xml
@@ -35,8 +35,8 @@
 
     <modules>
         <module>cassandra</module>
-        <module>elasticsearch-v7</module>
         <module>jpa</module>
+        <module>opensearch</module>
         <module>pulsar</module>
         <module>rabbitmq</module>
     </modules>
diff --git a/mailbox/opensearch/example_french_index.json b/mailbox/opensearch/example_french_index.json
deleted file mode 100644
index b4a89cc35d..0000000000
--- a/mailbox/opensearch/example_french_index.json
+++ /dev/null
@@ -1,247 +0,0 @@
-{
-	"settings": {
-		"number_of_shards": 5,
-		"number_of_replicas": 1,
-		"index.write.wait_for_active_shards": 1,
-		"analysis": {
-			"normalizer": {
-				"case_insensitive": {
-					"type": "custom",
-					"char_filter": [],
-					"filter": ["lowercase", "asciifolding"]
-				}
-			},
-			"analyzer": {
-				"keep_mail_and_url": {
-					"tokenizer": "uax_url_email",
-					"filter": ["lowercase", "stop"]
-				},
-				"keep_mail_and_url_french": {
-					"tokenizer": "uax_url_email",
-					"filter": ["lowercase", "french_stop", "french_elision", "french_stemmer"]
-				}
-			},
-			"tokenizer": {},
-			"filter": {
-				"french_elision": {
-					"type": "elision",
-					"articles_case": true,
-					"articles": [
-						"l", "m", "t", "qu", "n", "s",
-						"j", "d", "c", "jusqu", "quoiqu",
-						"lorsqu", "puisqu"
-					]
-				},
-				"french_stop": {
-					"type": "stop",
-					"stopwords": "_french_"
-				},
-				"french_stemmer": {
-					"type": "stemmer",
-					"language": "light_french"
-				}
-			}
-		}
-	},
-	"mappings": {
-		"dynamic": "strict",
-		"_routing": {
-			"required": true
-		},
-		"properties": {
-			"messageId": {
-				"type": "keyword",
-				"store": true
-			},
-			"threadId": {
-				"type": "keyword"
-			},
-			"uid": {
-				"type": "long",
-				"store": true
-			},
-			"modSeq": {
-				"type": "long"
-			},
-			"size": {
-				"type": "long"
-			},
-			"isAnswered": {
-				"type": "boolean"
-			},
-			"isDeleted": {
-				"type": "boolean"
-			},
-			"isDraft": {
-				"type": "boolean"
-			},
-			"isFlagged": {
-				"type": "boolean"
-			},
-			"isRecent": {
-				"type": "boolean"
-			},
-			"isUnread": {
-				"type": "boolean"
-			},
-			"date": {
-				"type": "date",
-				"format": "uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX"
-			},
-			"sentDate": {
-				"type": "date",
-				"format": "uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX"
-			},
-			"userFlags": {
-				"type": "keyword",
-				"normalizer": "case_insensitive"
-			},
-			"mediaType": {
-				"type": "keyword"
-			},
-			"subtype": {
-				"type": "keyword"
-			},
-			"from": {
-				"properties": {
-					"name": {
-						"type": "text",
-						"analyzer": "keep_mail_and_url_french"
-					},
-					"address": {
-						"type": "text",
-						"analyzer": "standard",
-						"search_analyzer": "keep_mail_and_url",
-						"fields": {
-							"raw": {
-								"type": "keyword",
-								"normalizer": "case_insensitive"
-							}
-						}
-					}
-				}
-			},
-			"headers": {
-				"type": "nested",
-				"properties": {
-					"name": {
-						"type": "keyword"
-					},
-					"value": {
-						"type": "text",
-						"analyzer": "keep_mail_and_url"
-					}
-				}
-			},
-			"subject": {
-				"type": "text",
-				"analyzer": "keep_mail_and_url_french",
-				"fields": {
-					"raw": {
-						"type": "keyword",
-						"normalizer": "case_insensitive"
-					}
-				}
-			},
-			"to": {
-				"properties": {
-					"name": {
-						"type": "text",
-						"analyzer": "keep_mail_and_url_french"
-					},
-					"address": {
-						"type": "text",
-						"analyzer": "standard",
-						"search_analyzer": "keep_mail_and_url",
-						"fields": {
-							"raw": {
-								"type": "keyword",
-								"normalizer": "case_insensitive"
-							}
-						}
-					}
-				}
-			},
-			"cc": {
-				"properties": {
-					"name": {
-						"type": "text",
-						"analyzer": "keep_mail_and_url_french"
-					},
-					"address": {
-						"type": "text",
-						"analyzer": "standard",
-						"search_analyzer": "keep_mail_and_url",
-						"fields": {
-							"raw": {
-								"type": "keyword",
-								"normalizer": "case_insensitive"
-							}
-						}
-					}
-				}
-			},
-			"bcc": {
-				"properties": {
-					"name": {
-						"type": "text",
-						"analyzer": "keep_mail_and_url_french"
-					},
-					"address": {
-						"type": "text",
-						"analyzer": "standard",
-						"search_analyzer": "keep_mail_and_url",
-						"fields": {
-							"raw": {
-								"type": "keyword",
-								"normalizer": "case_insensitive"
-							}
-						}
-					}
-				}
-			},
-			"mailboxId": {
-				"type": "keyword",
-				"store": true
-			},
-			"mimeMessageID": {
-				"type": "keyword"
-			},
-			"textBody": {
-				"type": "text",
-				"analyzer": "french"
-			},
-			"htmlBody": {
-				"type": "text",
-				"analyzer": "french"
-			},
-			"hasAttachment": {
-				"type": "boolean"
-			},
-			"attachments": {
-				"properties": {
-					"fileName": {
-						"type": "text",
-						"analyzer": "french"
-					},
-					"textContent": {
-						"type": "text",
-						"analyzer": "french"
-					},
-					"mediaType": {
-						"type": "keyword"
-					},
-					"subtype": {
-						"type": "keyword"
-					},
-					"fileExtension": {
-						"type": "keyword"
-					},
-					"contentDisposition": {
-						"type": "keyword"
-					}
-				}
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/mailbox/elasticsearch-v7/pom.xml b/mailbox/opensearch/pom.xml
similarity index 95%
rename from mailbox/elasticsearch-v7/pom.xml
rename to mailbox/opensearch/pom.xml
index 3650cf3204..30fa8a2934 100644
--- a/mailbox/elasticsearch-v7/pom.xml
+++ b/mailbox/opensearch/pom.xml
@@ -27,18 +27,18 @@
         <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
-    <name>Apache James :: Mailbox :: ElasticSearch</name>
-    <description>Apache James Mailbox IMAP search implementation using ElasticSearch</description>
+    <artifactId>apache-james-mailbox-opensearch</artifactId>
+    <name>Apache James :: Mailbox :: Opensearch</name>
+    <description>Apache James Mailbox IMAP search implementation using Opensearch</description>
 
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchMailboxConfiguration.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/ElasticSearchMailboxConfiguration.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchMailboxConfiguration.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/ElasticSearchMailboxConfiguration.java
index 546e0c994e..000c9f40d0 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchMailboxConfiguration.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/ElasticSearchMailboxConfiguration.java
@@ -17,15 +17,15 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
 import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.commons.configuration2.Configuration;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 
 public class ElasticSearchMailboxConfiguration {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/IndexAttachments.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexAttachments.java
similarity index 96%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/IndexAttachments.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexAttachments.java
index a66e26d9a4..b7c90d9e60 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/IndexAttachments.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexAttachments.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
 public enum IndexAttachments {
     NO, YES
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxElasticSearchConstants.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxElasticSearchConstants.java
similarity index 87%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxElasticSearchConstants.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxElasticSearchConstants.java
index ec66fcf247..6c2743178f 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxElasticSearchConstants.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxElasticSearchConstants.java
@@ -17,11 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 
 public interface MailboxElasticSearchConstants {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIdRoutingKeyFactory.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactory.java
similarity index 93%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIdRoutingKeyFactory.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactory.java
index 0946944dca..65b78e7493 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIdRoutingKeyFactory.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactory.java
@@ -17,9 +17,9 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
-import org.apache.james.backends.es.v7.RoutingKey;
+import org.apache.james.backends.opensearch.RoutingKey;
 import org.apache.james.mailbox.model.MailboxId;
 
 public class MailboxIdRoutingKeyFactory implements RoutingKey.Factory<MailboxId> {
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
similarity index 84%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
index ab61927f89..3a686e494d 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIndexCreationUtil.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
@@ -17,14 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.IndexCreationFactory;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.IndexCreationFactory;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 
 public class MailboxIndexCreationUtil {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxMappingFactory.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
similarity index 54%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxMappingFactory.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
index 0bfb029c49..91823e9280 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxMappingFactory.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
@@ -17,62 +17,31 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
-
-import static org.apache.james.backends.es.v7.IndexCreationFactory.ANALYZER;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.BOOLEAN;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.CASE_INSENSITIVE;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.FIELDS;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.FORMAT;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.KEEP_MAIL_AND_URL;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.KEYWORD;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.LONG;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.NESTED;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.NORMALIZER;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.PROPERTIES;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.RAW;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.REQUIRED;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.ROUTING;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.SEARCH_ANALYZER;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.TYPE;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.ATTACHMENTS;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.BCC;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.CC;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.DATE;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.FROM;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.HAS_ATTACHMENT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.HEADERS;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.HTML_BODY;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_ANSWERED;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_DELETED;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_DRAFT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_FLAGGED;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_RECENT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_UNREAD;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MAILBOX_ID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MEDIA_TYPE;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MESSAGE_ID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MIME_MESSAGE_ID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MODSEQ;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.SENT_DATE;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.SIZE;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.SUBJECT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.SUBTYPE;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.TEXT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.TEXT_BODY;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.THREAD_ID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.TO;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.UID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.USER_FLAGS;
-import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+package org.apache.james.mailbox.opensearch;
+
+import static org.apache.james.backends.opensearch.IndexCreationFactory.ANALYZER;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.BOOLEAN;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.CASE_INSENSITIVE;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.FIELDS;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.FORMAT;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.KEEP_MAIL_AND_URL;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.KEYWORD;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.LONG;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.NESTED;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.NORMALIZER;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.PROPERTIES;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.RAW;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.REQUIRED;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.ROUTING;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.SEARCH_ANALYZER;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.TYPE;
+import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.v7.IndexCreationFactory;
-import org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.Attachment;
-import org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.EMailer;
-import org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.HEADER;
-import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.apache.james.backends.opensearch.IndexCreationFactory;
+import org.apache.james.mailbox.opensearch.json.JsonMessageConstants;
+import org.opensearch.common.xcontent.XContentBuilder;
 
 public class MailboxMappingFactory {
     private static final String STANDARD = "standard";
@@ -91,83 +60,83 @@ public class MailboxMappingFactory {
 
                     .startObject(PROPERTIES)
 
-                        .startObject(MESSAGE_ID)
+                        .startObject(JsonMessageConstants.MESSAGE_ID)
                             .field(TYPE, KEYWORD)
                             .field(STORE, true)
                         .endObject()
 
-                        .startObject(THREAD_ID)
+                        .startObject(JsonMessageConstants.THREAD_ID)
                             .field(TYPE, KEYWORD)
                         .endObject()
 
-                        .startObject(UID)
+                        .startObject(JsonMessageConstants.UID)
                             .field(TYPE, LONG)
                             .field(STORE, true)
                         .endObject()
 
-                        .startObject(MODSEQ)
+                        .startObject(JsonMessageConstants.MODSEQ)
                             .field(TYPE, LONG)
                         .endObject()
 
-                        .startObject(SIZE)
+                        .startObject(JsonMessageConstants.SIZE)
                             .field(TYPE, LONG)
                         .endObject()
 
-                        .startObject(IS_ANSWERED)
+                        .startObject(JsonMessageConstants.IS_ANSWERED)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(IS_DELETED)
+                        .startObject(JsonMessageConstants.IS_DELETED)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(IS_DRAFT)
+                        .startObject(JsonMessageConstants.IS_DRAFT)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(IS_FLAGGED)
+                        .startObject(JsonMessageConstants.IS_FLAGGED)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(IS_RECENT)
+                        .startObject(JsonMessageConstants.IS_RECENT)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(IS_UNREAD)
+                        .startObject(JsonMessageConstants.IS_UNREAD)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(DATE)
+                        .startObject(JsonMessageConstants.DATE)
                             .field(TYPE, IndexCreationFactory.DATE)
                             .field(FORMAT, "uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
                         .endObject()
 
-                        .startObject(SENT_DATE)
+                        .startObject(JsonMessageConstants.SENT_DATE)
                             .field(TYPE, IndexCreationFactory.DATE)
                             .field(FORMAT, "uuuu-MM-dd'T'HH:mm:ssX||uuuu-MM-dd'T'HH:mm:ssXXX||uuuu-MM-dd'T'HH:mm:ssXXXXX")
                         .endObject()
 
-                        .startObject(USER_FLAGS)
+                        .startObject(JsonMessageConstants.USER_FLAGS)
                             .field(TYPE, KEYWORD)
                             .field(NORMALIZER, CASE_INSENSITIVE)
                         .endObject()
 
-                        .startObject(MEDIA_TYPE)
+                        .startObject(JsonMessageConstants.MEDIA_TYPE)
                             .field(TYPE, KEYWORD)
                         .endObject()
 
-                        .startObject(SUBTYPE)
+                        .startObject(JsonMessageConstants.SUBTYPE)
                             .field(TYPE, KEYWORD)
                         .endObject()
 
-                        .startObject(FROM)
+                        .startObject(JsonMessageConstants.FROM)
                             .startObject(PROPERTIES)
-                                .startObject(EMailer.NAME)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.NAME)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, KEEP_MAIL_AND_URL)
                                 .endObject()
-                                .startObject(EMailer.ADDRESS)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.ADDRESS)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, STANDARD)
                                     .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
                                     .startObject(FIELDS)
@@ -180,21 +149,21 @@ public class MailboxMappingFactory {
                             .endObject()
                         .endObject()
 
-                        .startObject(HEADERS)
+                        .startObject(JsonMessageConstants.HEADERS)
                             .field(TYPE, NESTED)
                             .startObject(PROPERTIES)
-                                .startObject(HEADER.NAME)
+                                .startObject(JsonMessageConstants.HEADER.NAME)
                                     .field(TYPE, KEYWORD)
                                 .endObject()
-                                .startObject(HEADER.VALUE)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.HEADER.VALUE)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, KEEP_MAIL_AND_URL)
                                 .endObject()
                             .endObject()
                         .endObject()
 
-                        .startObject(SUBJECT)
-                            .field(TYPE, TEXT)
+                        .startObject(JsonMessageConstants.SUBJECT)
+                            .field(TYPE, JsonMessageConstants.TEXT)
                             .field(ANALYZER, KEEP_MAIL_AND_URL)
                             .startObject(FIELDS)
                                 .startObject(RAW)
@@ -204,14 +173,14 @@ public class MailboxMappingFactory {
                             .endObject()
                         .endObject()
 
-                        .startObject(TO)
+                        .startObject(JsonMessageConstants.TO)
                             .startObject(PROPERTIES)
-                                .startObject(EMailer.NAME)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.NAME)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, KEEP_MAIL_AND_URL)
                                 .endObject()
-                                .startObject(EMailer.ADDRESS)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.ADDRESS)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, STANDARD)
                                     .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
                                     .startObject(FIELDS)
@@ -224,14 +193,14 @@ public class MailboxMappingFactory {
                             .endObject()
                         .endObject()
 
-                        .startObject(CC)
+                        .startObject(JsonMessageConstants.CC)
                             .startObject(PROPERTIES)
-                                .startObject(EMailer.NAME)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.NAME)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, KEEP_MAIL_AND_URL)
                                 .endObject()
-                                .startObject(EMailer.ADDRESS)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.ADDRESS)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, STANDARD)
                                     .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
                                     .startObject(FIELDS)
@@ -244,14 +213,14 @@ public class MailboxMappingFactory {
                             .endObject()
                         .endObject()
 
-                        .startObject(BCC)
+                        .startObject(JsonMessageConstants.BCC)
                             .startObject(PROPERTIES)
-                                .startObject(EMailer.NAME)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.NAME)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, KEEP_MAIL_AND_URL)
                                 .endObject()
-                                .startObject(EMailer.ADDRESS)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.EMailer.ADDRESS)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, STANDARD)
                                     .field(SEARCH_ANALYZER, KEEP_MAIL_AND_URL)
                                     .startObject(FIELDS)
@@ -264,49 +233,49 @@ public class MailboxMappingFactory {
                             .endObject()
                         .endObject()
 
-                        .startObject(MAILBOX_ID)
+                        .startObject(JsonMessageConstants.MAILBOX_ID)
                             .field(TYPE, KEYWORD)
                             .field(STORE, true)
                         .endObject()
 
-                        .startObject(MIME_MESSAGE_ID)
+                        .startObject(JsonMessageConstants.MIME_MESSAGE_ID)
                             .field(TYPE, KEYWORD)
                         .endObject()
 
-                        .startObject(TEXT_BODY)
-                            .field(TYPE, TEXT)
+                        .startObject(JsonMessageConstants.TEXT_BODY)
+                            .field(TYPE, JsonMessageConstants.TEXT)
                             .field(ANALYZER, STANDARD)
                         .endObject()
 
-                        .startObject(HTML_BODY)
-                            .field(TYPE, TEXT)
+                        .startObject(JsonMessageConstants.HTML_BODY)
+                            .field(TYPE, JsonMessageConstants.TEXT)
                             .field(ANALYZER, STANDARD)
                         .endObject()
 
-                        .startObject(HAS_ATTACHMENT)
+                        .startObject(JsonMessageConstants.HAS_ATTACHMENT)
                             .field(TYPE, BOOLEAN)
                         .endObject()
 
-                        .startObject(ATTACHMENTS)
+                        .startObject(JsonMessageConstants.ATTACHMENTS)
                             .startObject(PROPERTIES)
-                                .startObject(Attachment.FILENAME)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.Attachment.FILENAME)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, STANDARD)
                                 .endObject()
-                                .startObject(Attachment.TEXT_CONTENT)
-                                    .field(TYPE, TEXT)
+                                .startObject(JsonMessageConstants.Attachment.TEXT_CONTENT)
+                                    .field(TYPE, JsonMessageConstants.TEXT)
                                     .field(ANALYZER, STANDARD)
                                 .endObject()
-                                .startObject(Attachment.MEDIA_TYPE)
+                                .startObject(JsonMessageConstants.Attachment.MEDIA_TYPE)
                                     .field(TYPE, KEYWORD)
                                 .endObject()
-                                .startObject(Attachment.SUBTYPE)
+                                .startObject(JsonMessageConstants.Attachment.SUBTYPE)
                                     .field(TYPE, KEYWORD)
                                 .endObject()
-                                .startObject(Attachment.FILE_EXTENSION)
+                                .startObject(JsonMessageConstants.Attachment.FILE_EXTENSION)
                                     .field(TYPE, KEYWORD)
                                 .endObject()
-                                .startObject(Attachment.CONTENT_DISPOSITION)
+                                .startObject(JsonMessageConstants.Attachment.CONTENT_DISPOSITION)
                                     .field(TYPE, KEYWORD)
                                 .endObject()
                             .endObject()
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/ElasticSearchListeningMessageSearchIndex.java
similarity index 87%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/events/ElasticSearchListeningMessageSearchIndex.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/ElasticSearchListeningMessageSearchIndex.java
index ae6c4985bc..9d765b1239 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.mailbox.elasticsearch.v7.events;
+package org.apache.james.mailbox.opensearch.events;
 
 import static com.google.common.collect.ImmutableList.toImmutableList;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_ANSWERED;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_DELETED;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_DRAFT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_FLAGGED;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_RECENT;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.IS_UNREAD;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MAILBOX_ID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.MESSAGE_ID;
-import static org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants.UID;
-import static org.elasticsearch.index.query.QueryBuilders.termQuery;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.IS_ANSWERED;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.IS_DELETED;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.IS_DRAFT;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.IS_FLAGGED;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.IS_RECENT;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.IS_UNREAD;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.MAILBOX_ID;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.MESSAGE_ID;
+import static org.apache.james.mailbox.opensearch.json.JsonMessageConstants.UID;
+import static org.opensearch.index.query.QueryBuilders.termQuery;
 
 import java.util.Collection;
 import java.util.EnumSet;
@@ -41,10 +41,10 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import javax.mail.Flags;
 
-import org.apache.james.backends.es.v7.DocumentId;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.RoutingKey;
-import org.apache.james.backends.es.v7.UpdatedRepresentation;
+import org.apache.james.backends.opensearch.DocumentId;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.RoutingKey;
+import org.apache.james.backends.opensearch.UpdatedRepresentation;
 import org.apache.james.events.Group;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxManager.MessageCapabilities;
@@ -52,21 +52,21 @@ import org.apache.james.mailbox.MailboxManager.SearchCapabilities;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.SessionProvider;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.model.Mailbox;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.UpdatedFlags;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
-import org.elasticsearch.action.get.GetResponse;
-import org.elasticsearch.common.document.DocumentField;
-import org.elasticsearch.index.query.TermQueryBuilder;
-import org.elasticsearch.search.SearchHit;
+import org.opensearch.action.get.GetResponse;
+import org.opensearch.common.document.DocumentField;
+import org.opensearch.index.query.TermQueryBuilder;
+import org.opensearch.search.SearchHit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailer.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailer.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailer.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailer.java
index fcb480f5c6..f299b0719e 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailer.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailer.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.util.Objects;
 import java.util.Optional;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailers.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailers.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailers.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailers.java
index 98b8894a2c..d1a572c86b 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailers.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailers.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.util.Set;
 import java.util.stream.Collectors;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/HeaderCollection.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/HeaderCollection.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
index 6a776398b4..6055b2412a 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/HeaderCollection.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.time.ZonedDateTime;
 import java.util.List;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/IndexableMessage.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/IndexableMessage.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/IndexableMessage.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/IndexableMessage.java
index d224b43d56..774b9efb06 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/IndexableMessage.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/IndexableMessage.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.io.IOException;
 import java.time.Instant;
@@ -28,9 +28,9 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.james.mailbox.ModSeq;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.model.MessageAttachmentMetadata;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.search.SearchUtil;
 import org.apache.james.mime4j.MimeException;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/JsonMessageConstants.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/JsonMessageConstants.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/JsonMessageConstants.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/JsonMessageConstants.java
index 4883f1243e..c77cf55639 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/JsonMessageConstants.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/JsonMessageConstants.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 public interface JsonMessageConstants {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageToElasticSearchJson.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageToElasticSearchJson.java
similarity index 96%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageToElasticSearchJson.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageToElasticSearchJson.java
index 564d750083..71ab76e7bc 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageToElasticSearchJson.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageToElasticSearchJson.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.time.ZoneId;
 
@@ -25,8 +25,8 @@ import javax.inject.Inject;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.ModSeq;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageUpdateJson.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageUpdateJson.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageUpdateJson.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageUpdateJson.java
index 4731ee38fc..0da0d8cd4f 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageUpdateJson.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageUpdateJson.java
@@ -19,7 +19,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import javax.mail.Flags;
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePart.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePart.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePart.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePart.java
index 8a286b057d..8adf2d8d45 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePart.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePart.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartContainerBuilder.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartContainerBuilder.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartContainerBuilder.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartContainerBuilder.java
index 5e4fb1ee89..be742dea29 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartContainerBuilder.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartContainerBuilder.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.io.InputStream;
 import java.nio.charset.Charset;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartParser.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartParser.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartParser.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartParser.java
index ef6c18f50f..bf4ebe10d4 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartParser.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartParser.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.io.IOException;
 import java.nio.charset.Charset;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/RootMimePartContainerBuilder.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/RootMimePartContainerBuilder.java
similarity index 98%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/RootMimePartContainerBuilder.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/RootMimePartContainerBuilder.java
index fc394205ca..90e686b590 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/RootMimePartContainerBuilder.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/RootMimePartContainerBuilder.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.io.InputStream;
 import java.nio.charset.Charset;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/SerializableMessage.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/SerializableMessage.java
similarity index 95%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/SerializableMessage.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/SerializableMessage.java
index f49a4ef594..e91a295066 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/SerializableMessage.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/SerializableMessage.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 public interface SerializableMessage {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/Subjects.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/Subjects.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/Subjects.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/Subjects.java
index a7fcfeb08c..3a8600521b 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/json/Subjects.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/Subjects.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.util.Set;
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/CriterionConverter.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java
similarity index 94%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/CriterionConverter.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java
index a79f565797..1e172ac446 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/CriterionConverter.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java
@@ -17,15 +17,15 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.query;
+package org.apache.james.mailbox.opensearch.query;
 
-import static org.apache.james.backends.es.v7.IndexCreationFactory.RAW;
-import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
-import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
-import static org.elasticsearch.index.query.QueryBuilders.matchQuery;
-import static org.elasticsearch.index.query.QueryBuilders.nestedQuery;
-import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
-import static org.elasticsearch.index.query.QueryBuilders.termQuery;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.RAW;
+import static org.opensearch.index.query.QueryBuilders.boolQuery;
+import static org.opensearch.index.query.QueryBuilders.matchAllQuery;
+import static org.opensearch.index.query.QueryBuilders.matchQuery;
+import static org.opensearch.index.query.QueryBuilders.nestedQuery;
+import static org.opensearch.index.query.QueryBuilders.rangeQuery;
+import static org.opensearch.index.query.QueryBuilders.termQuery;
 
 import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
@@ -39,15 +39,15 @@ import java.util.stream.Stream;
 
 import javax.mail.Flags;
 
-import org.apache.james.mailbox.elasticsearch.v7.json.HeaderCollection;
-import org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.SearchQuery.Criterion;
 import org.apache.james.mailbox.model.SearchQuery.HeaderOperator;
+import org.apache.james.mailbox.opensearch.json.HeaderCollection;
+import org.apache.james.mailbox.opensearch.json.JsonMessageConstants;
 import org.apache.lucene.search.join.ScoreMode;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
+import org.opensearch.index.query.BoolQueryBuilder;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.query.QueryBuilders;
 
 public class CriterionConverter {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/DateResolutionFormatter.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatter.java
similarity index 98%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/DateResolutionFormatter.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatter.java
index 8548e27684..3c3a78384f 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/DateResolutionFormatter.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatter.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.query;
+package org.apache.james.mailbox.opensearch.query;
 
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/QueryConverter.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/QueryConverter.java
similarity index 88%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/QueryConverter.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/QueryConverter.java
index 5dde6ad099..1f6a34cf7e 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/QueryConverter.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/QueryConverter.java
@@ -17,10 +17,10 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.query;
+package org.apache.james.mailbox.opensearch.query;
 
-import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
-import static org.elasticsearch.index.query.QueryBuilders.termsQuery;
+import static org.opensearch.index.query.QueryBuilders.boolQuery;
+import static org.opensearch.index.query.QueryBuilders.termsQuery;
 
 import java.util.Collection;
 import java.util.List;
@@ -28,11 +28,11 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.SearchQuery;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilder;
+import org.apache.james.mailbox.opensearch.json.JsonMessageConstants;
+import org.opensearch.index.query.BoolQueryBuilder;
+import org.opensearch.index.query.QueryBuilder;
 
 import com.google.common.collect.ImmutableList;
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/SortConverter.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/SortConverter.java
similarity index 89%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/SortConverter.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/SortConverter.java
index 48db609fb5..e1216a951f 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/query/SortConverter.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/SortConverter.java
@@ -17,15 +17,15 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.query;
+package org.apache.james.mailbox.opensearch.query;
 
-import org.apache.james.backends.es.v7.IndexCreationFactory;
-import org.apache.james.mailbox.elasticsearch.v7.json.JsonMessageConstants;
+import org.apache.james.backends.opensearch.IndexCreationFactory;
 import org.apache.james.mailbox.model.SearchQuery;
-import org.elasticsearch.search.sort.FieldSortBuilder;
-import org.elasticsearch.search.sort.SortBuilders;
-import org.elasticsearch.search.sort.SortMode;
-import org.elasticsearch.search.sort.SortOrder;
+import org.apache.james.mailbox.opensearch.json.JsonMessageConstants;
+import org.opensearch.search.sort.FieldSortBuilder;
+import org.opensearch.search.sort.SortBuilders;
+import org.opensearch.search.sort.SortMode;
+import org.opensearch.search.sort.SortOrder;
 
 public class SortConverter {
 
diff --git a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/search/ElasticSearchSearcher.java b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/search/ElasticSearchSearcher.java
similarity index 85%
rename from mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/search/ElasticSearchSearcher.java
rename to mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/search/ElasticSearchSearcher.java
index c709de687a..accd1b0c41 100644
--- a/mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/search/ElasticSearchSearcher.java
+++ b/mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/search/ElasticSearchSearcher.java
@@ -17,25 +17,25 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.search;
+package org.apache.james.mailbox.opensearch.search;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 
-import org.apache.james.backends.es.v7.AliasName;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.RoutingKey;
-import org.apache.james.backends.es.v7.search.ScrolledSearch;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.SortConverter;
+import org.apache.james.backends.opensearch.AliasName;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.RoutingKey;
+import org.apache.james.backends.opensearch.search.ScrolledSearch;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.SearchQuery;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.query.SortConverter;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.common.unit.TimeValue;
+import org.opensearch.search.SearchHit;
+import org.opensearch.search.builder.SearchSourceBuilder;
 
 import reactor.core.publisher.Flux;
 
diff --git a/mailbox/elasticsearch-v7/src/reporting-site/site.xml b/mailbox/opensearch/src/reporting-site/site.xml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/reporting-site/site.xml
rename to mailbox/opensearch/src/reporting-site/site.xml
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchIntegrationTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/ElasticSearchIntegrationTest.java
similarity index 95%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchIntegrationTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/ElasticSearchIntegrationTest.java
index 0c0eca2818..d70a4c71ac 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchIntegrationTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/ElasticSearchIntegrationTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS;
@@ -27,17 +27,17 @@ import java.nio.charset.StandardCharsets;
 import java.time.ZoneId;
 import java.util.List;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.model.ComposedMessageId;
@@ -57,11 +57,11 @@ import org.apache.james.util.ClassLoaderUtils;
 import org.awaitility.Awaitility;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchMailboxConfigurationTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/ElasticSearchMailboxConfigurationTest.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchMailboxConfigurationTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/ElasticSearchMailboxConfigurationTest.java
index 8d40aac947..5b0f4699fd 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/ElasticSearchMailboxConfigurationTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/ElasticSearchMailboxConfigurationTest.java
@@ -17,14 +17,14 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.commons.configuration2.PropertiesConfiguration;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 import org.junit.jupiter.api.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIdRoutingKeyFactoryTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactoryTest.java
similarity index 93%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIdRoutingKeyFactoryTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactoryTest.java
index 96453214e2..4714c243d3 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/MailboxIdRoutingKeyFactoryTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactoryTest.java
@@ -17,11 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7;
+package org.apache.james.mailbox.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.james.backends.es.v7.RoutingKey;
+import org.apache.james.backends.opensearch.RoutingKey;
 import org.apache.james.mailbox.model.TestId;
 import org.junit.jupiter.api.Test;
 
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/events/ElasticSearchListeningMessageSearchIndexTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/ElasticSearchListeningMessageSearchIndexTest.java
similarity index 94%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/events/ElasticSearchListeningMessageSearchIndexTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/ElasticSearchListeningMessageSearchIndexTest.java
index b168d7a5bf..98390425d1 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/events/ElasticSearchListeningMessageSearchIndexTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/ElasticSearchListeningMessageSearchIndexTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.mailbox.elasticsearch.v7.events;
+package org.apache.james.mailbox.opensearch.events;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
@@ -31,9 +31,9 @@ import java.util.Date;
 
 import javax.mail.Flags;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.Username;
 import org.apache.james.events.Group;
 import org.apache.james.mailbox.Authorizator;
@@ -41,14 +41,6 @@ import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.ModSeq;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.extractor.ParsedContent;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
@@ -68,6 +60,14 @@ import org.apache.james.mailbox.model.TestMessageId;
 import org.apache.james.mailbox.model.ThreadId;
 import org.apache.james.mailbox.model.UidValidity;
 import org.apache.james.mailbox.model.UpdatedFlags;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -80,15 +80,15 @@ import org.apache.james.mailbox.store.search.ListeningMessageSearchIndexContract
 import org.awaitility.Awaitility;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -208,7 +208,7 @@ class ElasticSearchListeningMessageSearchIndexTest {
 
     @Test
     void deserializeElasticSearchListeningMessageSearchIndexGroup() throws Exception {
-        assertThat(Group.deserialize("org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup"))
+        assertThat(Group.deserialize("org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup"))
             .isEqualTo(new ElasticSearchListeningMessageSearchIndex.ElasticSearchListeningMessageSearchIndexGroup());
     }
     
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailerTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailerTest.java
similarity index 96%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailerTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailerTest.java
index 2ace5ec530..48c28936e6 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailerTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailerTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailersTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailersTest.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailersTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailersTest.java
index 93e5800f85..8ca87744e3 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/EMailersTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailersTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/FieldImpl.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/FieldImpl.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/FieldImpl.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/FieldImpl.java
index 10fc337d26..6a7b25340b 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/FieldImpl.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/FieldImpl.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import java.util.Objects;
 
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/HeaderCollectionTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/HeaderCollectionTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
index d8c3f4e141..c8fee9ca85 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/HeaderCollectionTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/IndexableMessageTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/IndexableMessageTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java
index c51cdb4929..f242cc4cf1 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/IndexableMessageTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
@@ -32,7 +32,7 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.ModSeq;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.ParsedContent;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageToElasticSearchJsonTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MessageToElasticSearchJsonTest.java
similarity index 99%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageToElasticSearchJsonTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MessageToElasticSearchJsonTest.java
index e9ac8a028e..d4fbe568bb 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/MessageToElasticSearchJsonTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MessageToElasticSearchJsonTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
@@ -36,7 +36,7 @@ import org.apache.james.core.Username;
 import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.ModSeq;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.model.ByteContent;
 import org.apache.james.mailbox.model.MessageId;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MimePartTest.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MimePartTest.java
index 072e8d493b..38e7246e2a 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/MimePartTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MimePartTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/SubjectsTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/SubjectsTest.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/SubjectsTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/SubjectsTest.java
index 67898e77db..7779df597b 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/json/SubjectsTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/SubjectsTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.json;
+package org.apache.james.mailbox.opensearch.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/query/DateResolutionFormatterTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatterTest.java
similarity index 98%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/query/DateResolutionFormatterTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatterTest.java
index c70670a7aa..11b8266163 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/query/DateResolutionFormatterTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatterTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.query;
+package org.apache.james.mailbox.opensearch.query;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/query/SearchQueryTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/SearchQueryTest.java
similarity index 97%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/query/SearchQueryTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/SearchQueryTest.java
index 4b19735747..ec6eee36ae 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/query/SearchQueryTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/SearchQueryTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.query;
+package org.apache.james.mailbox.opensearch.query;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
diff --git a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/search/ElasticSearchSearcherTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/ElasticSearchSearcherTest.java
similarity index 87%
rename from mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/search/ElasticSearchSearcherTest.java
rename to mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/ElasticSearchSearcherTest.java
index c81ea0188f..9487241b7d 100644
--- a/mailbox/elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7/search/ElasticSearchSearcherTest.java
+++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/ElasticSearchSearcherTest.java
@@ -18,7 +18,7 @@
  * under the License.                                           *
  ***************************************************************/
 
-package org.apache.james.mailbox.elasticsearch.v7.search;
+package org.apache.james.mailbox.opensearch.search;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS;
@@ -29,21 +29,21 @@ import java.time.ZoneId;
 import java.util.List;
 import java.util.stream.IntStream;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
@@ -62,11 +62,11 @@ import org.apache.james.mime4j.dom.Message;
 import org.awaitility.Awaitility;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/bodyMakeTikaToFail.eml b/mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/bodyMakeTikaToFail.eml
rename to mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/emailWith3Attachments.eml b/mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/emailWith3Attachments.eml
rename to mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/htmlContent.txt b/mailbox/opensearch/src/test/resources/eml/htmlContent.txt
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/htmlContent.txt
rename to mailbox/opensearch/src/test/resources/eml/htmlContent.txt
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/inlined-mixed.eml b/mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/inlined-mixed.eml
rename to mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/inlined-mixed.json b/mailbox/opensearch/src/test/resources/eml/inlined-mixed.json
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/inlined-mixed.json
rename to mailbox/opensearch/src/test/resources/eml/inlined-mixed.json
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/mailCustomDateHeader.eml b/mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/mailCustomDateHeader.eml
rename to mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/mailCustomStringHeader.eml b/mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/mailCustomStringHeader.eml
rename to mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
diff --git a/mailbox/elasticsearch-v7/src/test/resources/eml/mailWithHeaders.eml b/mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
similarity index 100%
rename from mailbox/elasticsearch-v7/src/test/resources/eml/mailWithHeaders.eml
rename to mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/pom.xml b/mailbox/plugin/quota-search-opensearch/pom.xml
similarity index 92%
rename from mailbox/plugin/quota-search-elasticsearch-v7/pom.xml
rename to mailbox/plugin/quota-search-opensearch/pom.xml
index 709b9d16d0..3d7118ad21 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/pom.xml
+++ b/mailbox/plugin/quota-search-opensearch/pom.xml
@@ -27,18 +27,18 @@
         <relativePath>../../pom.xml</relativePath>
     </parent>
 
-    <artifactId>apache-james-mailbox-quota-search-elasticsearch-v7</artifactId>
-    <name>Apache James :: Mailbox :: Plugin :: Quota Search :: ElasticSearch</name>
-    <description>Apache James Mailbox ElasticSearch implementation for quota search</description>
+    <artifactId>apache-james-mailbox-quota-search-opensearch</artifactId>
+    <name>Apache James :: Mailbox :: Plugin :: Quota Search :: Opensearch</name>
+    <description>Apache James Mailbox OpenSearch implementation for quota search</description>
 
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaConfiguration.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaConfiguration.java
similarity index 96%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaConfiguration.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaConfiguration.java
index c636bf12fa..1d9f5ed3ac 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaConfiguration.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaConfiguration.java
@@ -17,15 +17,15 @@
  * under the License.
  */
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
 import java.util.Objects;
 import java.util.Optional;
 
 import org.apache.commons.configuration2.Configuration;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 
 public class ElasticSearchQuotaConfiguration {
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearcher.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearcher.java
similarity index 82%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearcher.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearcher.java
index 0710e1a69c..8593232262 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearcher.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearcher.java
@@ -17,26 +17,25 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
-
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.USER;
+package org.apache.james.quota.search.opensearch;
 
 import java.util.List;
 
-import org.apache.james.backends.es.v7.AliasName;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.search.ScrolledSearch;
+import org.apache.james.backends.opensearch.AliasName;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.search.ScrolledSearch;
 import org.apache.james.core.Username;
 import org.apache.james.quota.search.QuotaQuery;
 import org.apache.james.quota.search.QuotaSearcher;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.common.unit.TimeValue;
-import org.elasticsearch.search.SearchHit;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
-import org.elasticsearch.search.sort.SortBuilders;
-import org.elasticsearch.search.sort.SortOrder;
+import org.apache.james.quota.search.opensearch.json.JsonMessageConstants;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.common.unit.TimeValue;
+import org.opensearch.search.SearchHit;
+import org.opensearch.search.builder.SearchSourceBuilder;
+import org.opensearch.search.sort.SortBuilders;
+import org.opensearch.search.sort.SortOrder;
 
 import com.google.common.collect.ImmutableList;
 
@@ -101,6 +100,6 @@ public class ElasticSearchQuotaSearcher implements QuotaSearcher {
     private SearchSourceBuilder searchSourceBuilder(QuotaQuery query) {
         return new SearchSourceBuilder()
             .query(quotaQueryConverter.from(query))
-            .sort(SortBuilders.fieldSort(USER).order(SortOrder.ASC));
+            .sort(SortBuilders.fieldSort(JsonMessageConstants.USER).order(SortOrder.ASC));
     }
 }
\ No newline at end of file
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaQueryConverter.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaQueryConverter.java
similarity index 85%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaQueryConverter.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaQueryConverter.java
index 09139aedae..3454ef2eb8 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaQueryConverter.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaQueryConverter.java
@@ -17,13 +17,13 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.DOMAIN;
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.QUOTA_RATIO;
-import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
-import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
-import static org.elasticsearch.index.query.QueryBuilders.termQuery;
+import static org.apache.james.quota.search.opensearch.json.JsonMessageConstants.DOMAIN;
+import static org.apache.james.quota.search.opensearch.json.JsonMessageConstants.QUOTA_RATIO;
+import static org.opensearch.index.query.QueryBuilders.matchAllQuery;
+import static org.opensearch.index.query.QueryBuilders.rangeQuery;
+import static org.opensearch.index.query.QueryBuilders.termQuery;
 
 import java.util.List;
 import java.util.Map;
@@ -35,10 +35,10 @@ import org.apache.james.quota.search.QuotaClause.HasDomain;
 import org.apache.james.quota.search.QuotaClause.LessThan;
 import org.apache.james.quota.search.QuotaClause.MoreThan;
 import org.apache.james.quota.search.QuotaQuery;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.index.query.RangeQueryBuilder;
-import org.elasticsearch.index.query.TermQueryBuilder;
+import org.opensearch.index.query.BoolQueryBuilder;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.index.query.RangeQueryBuilder;
+import org.opensearch.index.query.TermQueryBuilder;
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableMap.Builder;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaRatioElasticSearchConstants.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioElasticSearchConstants.java
similarity index 84%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaRatioElasticSearchConstants.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioElasticSearchConstants.java
index 0a1386d670..9b6b439f84 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaRatioElasticSearchConstants.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioElasticSearchConstants.java
@@ -17,11 +17,11 @@
  * under the License.
  */
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 
 public interface QuotaRatioElasticSearchConstants {
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaRatioMappingFactory.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioMappingFactory.java
similarity index 69%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaRatioMappingFactory.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioMappingFactory.java
index 7785629105..68b73bc737 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaRatioMappingFactory.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioMappingFactory.java
@@ -17,22 +17,22 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
-import static org.apache.james.backends.es.v7.IndexCreationFactory.DOUBLE;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.KEYWORD;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.PROPERTIES;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.REQUIRED;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.ROUTING;
-import static org.apache.james.backends.es.v7.IndexCreationFactory.TYPE;
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.DOMAIN;
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.QUOTA_RATIO;
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.USER;
-import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.DOUBLE;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.KEYWORD;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.PROPERTIES;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.REQUIRED;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.ROUTING;
+import static org.apache.james.backends.opensearch.IndexCreationFactory.TYPE;
+import static org.apache.james.quota.search.opensearch.json.JsonMessageConstants.DOMAIN;
+import static org.apache.james.quota.search.opensearch.json.JsonMessageConstants.QUOTA_RATIO;
+import static org.apache.james.quota.search.opensearch.json.JsonMessageConstants.USER;
+import static org.opensearch.common.xcontent.XContentFactory.jsonBuilder;
 
 import java.io.IOException;
 
-import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.opensearch.common.xcontent.XContentBuilder;
 
 class QuotaRatioMappingFactory {
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaSearchIndexCreationUtil.java
similarity index 86%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaSearchIndexCreationUtil.java
index 33d72bc08c..bf1b008c3e 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/QuotaSearchIndexCreationUtil.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaSearchIndexCreationUtil.java
@@ -17,15 +17,15 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.v7.AliasName;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.IndexCreationFactory;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.AliasName;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.IndexCreationFactory;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 
 public class QuotaSearchIndexCreationUtil {
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/UserRoutingKeyFactory.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactory.java
similarity index 93%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/UserRoutingKeyFactory.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactory.java
index 1a375a5c3c..c2bab265f8 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/UserRoutingKeyFactory.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactory.java
@@ -17,9 +17,9 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
-import org.apache.james.backends.es.v7.RoutingKey;
+import org.apache.james.backends.opensearch.RoutingKey;
 import org.apache.james.core.Username;
 
 public class UserRoutingKeyFactory implements RoutingKey.Factory<Username> {
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/events/ElasticSearchQuotaMailboxListener.java
similarity index 90%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/events/ElasticSearchQuotaMailboxListener.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/events/ElasticSearchQuotaMailboxListener.java
index 599264a192..1c2f045a2c 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/events/ElasticSearchQuotaMailboxListener.java
@@ -16,22 +16,22 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.quota.search.elasticsearch.v7.events;
+package org.apache.james.quota.search.opensearch.events;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
-import org.apache.james.backends.es.v7.DocumentId;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.RoutingKey;
+import org.apache.james.backends.opensearch.DocumentId;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.RoutingKey;
 import org.apache.james.core.Username;
 import org.apache.james.events.Event;
 import org.apache.james.events.EventListener;
 import org.apache.james.events.Group;
 import org.apache.james.mailbox.events.MailboxEvents.QuotaUsageUpdatedEvent;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
-import org.apache.james.quota.search.elasticsearch.v7.QuotaRatioElasticSearchConstants;
-import org.apache.james.quota.search.elasticsearch.v7.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.quota.search.opensearch.QuotaRatioElasticSearchConstants;
+import org.apache.james.quota.search.opensearch.json.QuotaRatioToElasticSearchJson;
 import org.reactivestreams.Publisher;
 
 import reactor.core.publisher.Mono;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/JsonMessageConstants.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/JsonMessageConstants.java
similarity index 95%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/JsonMessageConstants.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/JsonMessageConstants.java
index e8167280ec..5cb6a66875 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/JsonMessageConstants.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/JsonMessageConstants.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7.json;
+package org.apache.james.quota.search.opensearch.json;
 
 public interface JsonMessageConstants {
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioAsJson.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJson.java
similarity index 98%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioAsJson.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJson.java
index a713c6e326..9ace52696c 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioAsJson.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJson.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.quota.search.elasticsearch.v7.json;
+package org.apache.james.quota.search.opensearch.json;
 
 import java.util.Objects;
 import java.util.Optional;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioToElasticSearchJson.java b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToElasticSearchJson.java
similarity index 97%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioToElasticSearchJson.java
rename to mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToElasticSearchJson.java
index 65e83106d1..21182bea10 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioToElasticSearchJson.java
+++ b/mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToElasticSearchJson.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7.json;
+package org.apache.james.quota.search.opensearch.json;
 
 import javax.inject.Inject;
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaConfigurationTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaConfigurationTest.java
similarity index 95%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaConfigurationTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaConfigurationTest.java
index 2fb9d8fd09..afe452f080 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaConfigurationTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaConfigurationTest.java
@@ -17,14 +17,14 @@
  * under the License.
  */
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.commons.configuration2.PropertiesConfiguration;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReadAliasName;
-import org.apache.james.backends.es.v7.WriteAliasName;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReadAliasName;
+import org.apache.james.backends.opensearch.WriteAliasName;
 import org.junit.jupiter.api.Test;
 
 class ElasticSearchQuotaConfigurationTest {
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearchTestSystemExtension.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearchTestSystemExtension.java
similarity index 90%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearchTestSystemExtension.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearchTestSystemExtension.java
index b1c017a5e6..87858bac35 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearchTestSystemExtension.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -17,24 +17,24 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
 import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
-import org.apache.james.quota.search.elasticsearch.v7.events.ElasticSearchQuotaMailboxListener;
-import org.apache.james.quota.search.elasticsearch.v7.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.quota.search.opensearch.events.ElasticSearchQuotaMailboxListener;
+import org.apache.james.quota.search.opensearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.user.memory.MemoryUsersRepository;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearcherTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearcherTest.java
similarity index 98%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearcherTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearcherTest.java
index 9cc724b885..e72e0f1548 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/ElasticSearchQuotaSearcherTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/ElasticSearchQuotaSearcherTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
 import static org.apache.james.core.CoreFixture.Domains.SIMPSON_COM;
 import static org.assertj.core.api.Assertions.assertThat;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/QuotaQueryConverterTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/QuotaQueryConverterTest.java
similarity index 85%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/QuotaQueryConverterTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/QuotaQueryConverterTest.java
index c675b748b0..eef42098eb 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/QuotaQueryConverterTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/QuotaQueryConverterTest.java
@@ -16,21 +16,21 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
-import static org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants.QUOTA_RATIO;
+import static org.apache.james.quota.search.opensearch.json.JsonMessageConstants.QUOTA_RATIO;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
-import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
-import static org.elasticsearch.index.query.QueryBuilders.termQuery;
+import static org.opensearch.index.query.QueryBuilders.matchAllQuery;
+import static org.opensearch.index.query.QueryBuilders.rangeQuery;
+import static org.opensearch.index.query.QueryBuilders.termQuery;
 
 import org.apache.james.core.Domain;
 import org.apache.james.quota.search.QuotaBoundary;
 import org.apache.james.quota.search.QuotaQuery;
-import org.apache.james.quota.search.elasticsearch.v7.json.JsonMessageConstants;
-import org.elasticsearch.index.query.QueryBuilder;
+import org.apache.james.quota.search.opensearch.json.JsonMessageConstants;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.opensearch.index.query.QueryBuilder;
 
 class QuotaQueryConverterTest {
     QuotaQueryConverter testee;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/UserRoutingKeyFactoryTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactoryTest.java
similarity index 93%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/UserRoutingKeyFactoryTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactoryTest.java
index 41ae5a5dc3..b0f825ff0a 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/UserRoutingKeyFactoryTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactoryTest.java
@@ -17,11 +17,11 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7;
+package org.apache.james.quota.search.opensearch;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import org.apache.james.backends.es.v7.RoutingKey;
+import org.apache.james.backends.opensearch.RoutingKey;
 import org.apache.james.core.Username;
 import org.junit.jupiter.api.Test;
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/events/ElasticSearchQuotaMailboxListenerTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/events/ElasticSearchQuotaMailboxListenerTest.java
similarity index 83%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/events/ElasticSearchQuotaMailboxListenerTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/events/ElasticSearchQuotaMailboxListenerTest.java
index ce56b0316d..5b43f6ddf3 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/events/ElasticSearchQuotaMailboxListenerTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.quota.search.elasticsearch.v7.events;
+package org.apache.james.quota.search.opensearch.events;
 
 import static org.apache.james.quota.search.QuotaSearchFixture.TestConstants.BOB_USERNAME;
 import static org.apache.james.quota.search.QuotaSearchFixture.TestConstants.NOW;
@@ -28,10 +28,10 @@ import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.events.Event;
 import org.apache.james.events.Group;
 import org.apache.james.mailbox.SessionProvider;
@@ -40,21 +40,21 @@ import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.apache.james.quota.search.elasticsearch.v7.QuotaRatioElasticSearchConstants;
-import org.apache.james.quota.search.elasticsearch.v7.QuotaSearchIndexCreationUtil;
-import org.apache.james.quota.search.elasticsearch.v7.UserRoutingKeyFactory;
-import org.apache.james.quota.search.elasticsearch.v7.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.quota.search.opensearch.QuotaRatioElasticSearchConstants;
+import org.apache.james.quota.search.opensearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.quota.search.opensearch.UserRoutingKeyFactory;
+import org.apache.james.quota.search.opensearch.json.QuotaRatioToElasticSearchJson;
 import org.awaitility.Awaitility;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 
 class ElasticSearchQuotaMailboxListenerTest {
 
@@ -94,7 +94,7 @@ class ElasticSearchQuotaMailboxListenerTest {
 
     @Test
     void deserializeElasticSearchQuotaMailboxListenerGroup() throws Exception {
-        assertThat(Group.deserialize("org.apache.james.quota.search.elasticsearch.v7.events.ElasticSearchQuotaMailboxListener$ElasticSearchQuotaMailboxListenerGroup"))
+        assertThat(Group.deserialize("org.apache.james.quota.search.opensearch.events.ElasticSearchQuotaMailboxListener$ElasticSearchQuotaMailboxListenerGroup"))
             .isEqualTo(new ElasticSearchQuotaMailboxListener.ElasticSearchQuotaMailboxListenerGroup());
     }
 
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioAsJsonTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJsonTest.java
similarity index 98%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioAsJsonTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJsonTest.java
index 37af3d324b..9ca4f7400f 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioAsJsonTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJsonTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.quota.search.elasticsearch.v7.json;
+package org.apache.james.quota.search.opensearch.json;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioToElasticSearchJsonTest.java b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToElasticSearchJsonTest.java
similarity index 98%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioToElasticSearchJsonTest.java
rename to mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToElasticSearchJsonTest.java
index 8d653ebae3..702705a5ea 100644
--- a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7/json/QuotaRatioToElasticSearchJsonTest.java
+++ b/mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToElasticSearchJsonTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.quota.search.elasticsearch.v7.json;
+package org.apache.james.quota.search.opensearch.json;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/resources/quotaRatio.json b/mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatio.json
similarity index 100%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/resources/quotaRatio.json
rename to mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatio.json
diff --git a/mailbox/plugin/quota-search-elasticsearch-v7/src/test/resources/quotaRatioNoDomain.json b/mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatioNoDomain.json
similarity index 100%
rename from mailbox/plugin/quota-search-elasticsearch-v7/src/test/resources/quotaRatioNoDomain.json
rename to mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatioNoDomain.json
diff --git a/mailbox/pom.xml b/mailbox/pom.xml
index 4e39e4bb06..6e13a3750c 100644
--- a/mailbox/pom.xml
+++ b/mailbox/pom.xml
@@ -38,7 +38,6 @@
         <module>api</module>
         <module>backup</module>
         <module>cassandra</module>
-        <module>elasticsearch-v7</module>
 
         <module>event/json</module>
 
@@ -46,6 +45,8 @@
         <module>lucene</module>
         <module>memory</module>
 
+        <module>opensearch</module>
+
         <module>plugin/deleted-messages-vault</module>
         <module>plugin/deleted-messages-vault-cassandra</module>
 
@@ -54,7 +55,7 @@
         <module>plugin/quota-mailing-memory</module>
 
         <module>plugin/quota-search</module>
-        <module>plugin/quota-search-elasticsearch-v7</module>
+        <module>plugin/quota-search-opensearch</module>
         <module>plugin/quota-search-scanning</module>
 
         <module>plugin/spamassassin</module>
diff --git a/mpt/impl/imap-mailbox/elasticsearch/pom.xml b/mpt/impl/imap-mailbox/elasticsearch/pom.xml
index 2a59bd3979..55bb6f0b18 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/pom.xml
+++ b/mpt/impl/imap-mailbox/elasticsearch/pom.xml
@@ -33,11 +33,11 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
@@ -52,16 +52,16 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-memory</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
+            <type>test-jar</type>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-memory</artifactId>
-            <type>test-jar</type>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 7a44ac257f..a10d042732 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -23,11 +23,11 @@ import java.io.IOException;
 import java.time.ZoneId;
 
 import org.apache.commons.lang3.NotImplementedException;
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.imap.api.process.ImapProcessor;
@@ -35,15 +35,15 @@ import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.store.StoreMailboxManager;
diff --git a/mpt/impl/smtp/cassandra-pulsar/pom.xml b/mpt/impl/smtp/cassandra-pulsar/pom.xml
index 9e3d716f51..1fab32cbec 100644
--- a/mpt/impl/smtp/cassandra-pulsar/pom.xml
+++ b/mpt/impl/smtp/cassandra-pulsar/pom.xml
@@ -39,7 +39,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
index d1faeeda95..d1edb6110e 100644
--- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
+++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
@@ -39,7 +39,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/mpt/impl/smtp/cassandra/pom.xml b/mpt/impl/smtp/cassandra/pom.xml
index 000f825617..f4010c68bd 100644
--- a/mpt/impl/smtp/cassandra/pom.xml
+++ b/mpt/impl/smtp/cassandra/pom.xml
@@ -39,7 +39,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/pom.xml b/pom.xml
index 1866a7521c..d434538d75 100644
--- a/pom.xml
+++ b/pom.xml
@@ -670,23 +670,23 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-backends-es-v7</artifactId>
+                <artifactId>apache-james-backends-jpa</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-backends-es-v7</artifactId>
+                <artifactId>apache-james-backends-jpa</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-backends-jpa</artifactId>
+                <artifactId>apache-james-backends-opensearch</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-backends-jpa</artifactId>
+                <artifactId>apache-james-backends-opensearch</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
@@ -763,50 +763,50 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+                <artifactId>apache-james-mailbox-event-json</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+                <artifactId>apache-james-mailbox-jpa</artifactId>
                 <version>${project.version}</version>
-                <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-event-json</artifactId>
+                <artifactId>apache-james-mailbox-jpa</artifactId>
                 <version>${project.version}</version>
+                <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-jpa</artifactId>
+                <artifactId>apache-james-mailbox-lucene</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-jpa</artifactId>
+                <artifactId>apache-james-mailbox-lucene</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-lucene</artifactId>
+                <artifactId>apache-james-mailbox-memory</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-lucene</artifactId>
+                <artifactId>apache-james-mailbox-memory</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-memory</artifactId>
+                <artifactId>apache-james-mailbox-opensearch</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-memory</artifactId>
+                <artifactId>apache-james-mailbox-opensearch</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
@@ -834,7 +834,7 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
-                <artifactId>apache-james-mailbox-quota-search-elasticsearch-v7</artifactId>
+                <artifactId>apache-james-mailbox-quota-search-opensearch</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
diff --git a/server/apps/cassandra-app/pom.xml b/server/apps/cassandra-app/pom.xml
index 1ca7321361..c0bc26048c 100644
--- a/server/apps/cassandra-app/pom.xml
+++ b/server/apps/cassandra-app/pom.xml
@@ -60,7 +60,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
@@ -72,7 +72,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchExtension.java b/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchExtension.java
index 8bf2c3ca7d..c6d393aa1d 100644
--- a/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchExtension.java
+++ b/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchExtension.java
@@ -22,9 +22,9 @@ package org.apache.james;
 import java.time.Duration;
 import java.util.Optional;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
 import com.google.inject.Module;
diff --git a/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchRule.java b/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchRule.java
index 3e1fc7a033..55ba08c6ed 100644
--- a/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchRule.java
+++ b/server/apps/cassandra-app/src/test/java/org/apache/james/DockerElasticSearchRule.java
@@ -19,8 +19,8 @@
 
 package org.apache.james;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
 import org.apache.james.modules.TestDockerElasticSearchModule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
diff --git a/server/apps/cassandra-app/src/test/java/org/apache/james/ESReporterTest.java b/server/apps/cassandra-app/src/test/java/org/apache/james/ESReporterTest.java
index e27332d05f..efa22ffb0b 100644
--- a/server/apps/cassandra-app/src/test/java/org/apache/james/ESReporterTest.java
+++ b/server/apps/cassandra-app/src/test/java/org/apache/james/ESReporterTest.java
@@ -34,7 +34,7 @@ import java.util.TimerTask;
 import java.util.stream.Collectors;
 
 import org.apache.commons.net.imap.IMAPClient;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.Username;
 import org.apache.james.jmap.AccessToken;
 import org.apache.james.jmap.draft.JmapGuiceProbe;
@@ -42,10 +42,10 @@ import org.apache.james.modules.TestDockerESMetricReporterModule;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.utils.DataProbeImpl;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilders;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
diff --git a/server/apps/cassandra-app/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java b/server/apps/cassandra-app/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
index 88ee9e8eee..126e2f251f 100644
--- a/server/apps/cassandra-app/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
+++ b/server/apps/cassandra-app/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
@@ -22,7 +22,7 @@ package org.apache.james;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
 import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.lifecycle.api.StartUpCheck.CheckResult;
 import org.apache.james.modules.TestJMAPServerModule;
@@ -59,7 +59,7 @@ class JamesWithNonCompatibleElasticSearchServerTest {
                     .containsOnly(CheckResult.builder()
                         .checkName(ElasticSearchStartUpCheck.CHECK_NAME)
                         .resultType(StartUpCheck.ResultType.BAD)
-                        .description("ES version(6.3.2) is not compatible with the recommendation(7.10.2)")
+                        .description("ES version(6.3.2) is not compatible with the recommendation(2.0.0)")
                         .build()));
 
         assertThat(server.isStarted())
diff --git a/server/apps/cassandra-app/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java b/server/apps/cassandra-app/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java
index 20c2b4344a..e5e6f1c6f6 100644
--- a/server/apps/cassandra-app/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java
+++ b/server/apps/cassandra-app/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java
@@ -20,8 +20,8 @@
 package org.apache.james.modules;
 
 import org.apache.james.CleanupTasksPerformer;
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
diff --git a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc
index 1b74424961..5ff87ff214 100644
--- a/server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc
+++ b/server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc
@@ -144,7 +144,7 @@ Currently, an administrator can monitor indexation failures through
 `ERROR` log review. You can as well
 xref:operate/webadmin.adoc#_listing_failed_events[list failed events] by
 looking with the group called
-`org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup`.
+`org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup`.
 A first on-the-fly solution could be to just
 link:#_mailbox_event_bus[redeliver those group events with event dead letter].
 
diff --git a/server/apps/distributed-app/pom.xml b/server/apps/distributed-app/pom.xml
index b4c51a141d..c79d46c1cb 100644
--- a/server/apps/distributed-app/pom.xml
+++ b/server/apps/distributed-app/pom.xml
@@ -59,7 +59,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
@@ -77,7 +77,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/apps/distributed-pop3-app/pom.xml b/server/apps/distributed-pop3-app/pom.xml
index 9562edb1af..b5a54d9acf 100644
--- a/server/apps/distributed-pop3-app/pom.xml
+++ b/server/apps/distributed-pop3-app/pom.xml
@@ -56,7 +56,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
@@ -74,7 +74,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/apps/scaling-pulsar-smtp/pom.xml b/server/apps/scaling-pulsar-smtp/pom.xml
index 2fe96e1413..53f89effa9 100644
--- a/server/apps/scaling-pulsar-smtp/pom.xml
+++ b/server/apps/scaling-pulsar-smtp/pom.xml
@@ -60,11 +60,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchExtension.java b/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchExtension.java
index 8bf2c3ca7d..c6d393aa1d 100644
--- a/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchExtension.java
+++ b/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchExtension.java
@@ -22,9 +22,9 @@ package org.apache.james;
 import java.time.Duration;
 import java.util.Optional;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
 import com.google.inject.Module;
diff --git a/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchRule.java b/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchRule.java
index 3e1fc7a033..55ba08c6ed 100644
--- a/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchRule.java
+++ b/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/DockerElasticSearchRule.java
@@ -19,8 +19,8 @@
 
 package org.apache.james;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
 import org.apache.james.modules.TestDockerElasticSearchModule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
diff --git a/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java b/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java
index 20c2b4344a..e5e6f1c6f6 100644
--- a/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java
+++ b/server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/modules/TestDockerElasticSearchModule.java
@@ -20,8 +20,8 @@
 package org.apache.james.modules;
 
 import org.apache.james.CleanupTasksPerformer;
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
diff --git a/server/container/guice/cassandra/pom.xml b/server/container/guice/cassandra/pom.xml
index 4f51a156e2..d618af8d4c 100644
--- a/server/container/guice/cassandra/pom.xml
+++ b/server/container/guice/cassandra/pom.xml
@@ -47,7 +47,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/container/guice/elasticsearch/pom.xml b/server/container/guice/elasticsearch/pom.xml
index 839ef508b7..9424cd0f8a 100644
--- a/server/container/guice/elasticsearch/pom.xml
+++ b/server/container/guice/elasticsearch/pom.xml
@@ -41,11 +41,11 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-quota-search-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-quota-search-opensearch</artifactId>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
diff --git a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java
index ae2a18c876..ef89860c28 100644
--- a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java
+++ b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchClientModule.java
@@ -21,13 +21,13 @@ package org.apache.james.modules.mailbox;
 
 import java.util.Set;
 
-import org.apache.james.backends.es.v7.ClientProvider;
-import org.apache.james.backends.es.v7.ElasticSearchHealthCheck;
-import org.apache.james.backends.es.v7.IndexName;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ClientProvider;
+import org.apache.james.backends.opensearch.ElasticSearchHealthCheck;
+import org.apache.james.backends.opensearch.IndexName;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.healthcheck.HealthCheck;
-import org.apache.james.mailbox.elasticsearch.v7.ElasticSearchMailboxConfiguration;
-import org.apache.james.quota.search.elasticsearch.v7.ElasticSearchQuotaConfiguration;
+import org.apache.james.mailbox.opensearch.ElasticSearchMailboxConfiguration;
+import org.apache.james.quota.search.opensearch.ElasticSearchQuotaConfiguration;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.AbstractModule;
diff --git a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 41883c2503..d2ba429da6 100644
--- a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.modules.mailbox;
 
-import static org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher.DEFAULT_SEARCH_SIZE;
+import static org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher.DEFAULT_SEARCH_SIZE;
 
 import java.io.FileNotFoundException;
 import java.util.Set;
@@ -30,22 +30,22 @@ import javax.inject.Singleton;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
-import org.apache.james.backends.es.v7.RoutingKey;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.RoutingKey;
 import org.apache.james.events.EventListener;
 import org.apache.james.lifecycle.api.StartUpCheck;
 import org.apache.james.lifecycle.api.Startable;
-import org.apache.james.mailbox.elasticsearch.v7.ElasticSearchMailboxConfiguration;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.opensearch.ElasticSearchMailboxConfiguration;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex.SearchOverride;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
diff --git a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index 6565c7c288..061000ca0a 100644
--- a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -28,19 +28,19 @@ import javax.inject.Inject;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.ex.ConfigurationException;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.events.EventListener;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.quota.search.QuotaSearcher;
-import org.apache.james.quota.search.elasticsearch.v7.ElasticSearchQuotaConfiguration;
-import org.apache.james.quota.search.elasticsearch.v7.ElasticSearchQuotaSearcher;
-import org.apache.james.quota.search.elasticsearch.v7.QuotaSearchIndexCreationUtil;
-import org.apache.james.quota.search.elasticsearch.v7.UserRoutingKeyFactory;
-import org.apache.james.quota.search.elasticsearch.v7.events.ElasticSearchQuotaMailboxListener;
-import org.apache.james.quota.search.elasticsearch.v7.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.quota.search.opensearch.ElasticSearchQuotaConfiguration;
+import org.apache.james.quota.search.opensearch.ElasticSearchQuotaSearcher;
+import org.apache.james.quota.search.opensearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.quota.search.opensearch.UserRoutingKeyFactory;
+import org.apache.james.quota.search.opensearch.events.ElasticSearchQuotaMailboxListener;
+import org.apache.james.quota.search.opensearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.utils.InitializationOperation;
 import org.apache.james.utils.InitilizationOperationBuilder;
 import org.apache.james.utils.PropertiesProvider;
diff --git a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java
index 8ee50b28fd..83560db985 100644
--- a/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java
+++ b/server/container/guice/elasticsearch/src/main/java/org/apache/james/modules/mailbox/ElasticSearchStartUpCheck.java
@@ -23,11 +23,11 @@ import java.io.IOException;
 
 import javax.inject.Inject;
 
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.lifecycle.api.StartUpCheck;
-import org.elasticsearch.Version;
-import org.elasticsearch.client.RequestOptions;
+import org.opensearch.Version;
+import org.opensearch.client.RequestOptions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -35,7 +35,7 @@ public class ElasticSearchStartUpCheck implements StartUpCheck {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ElasticSearchConfiguration.class);
 
-    private static final Version RECOMMENDED_ES_VERSION = Version.V_7_10_2;
+    private static final Version RECOMMENDED_ES_VERSION = Version.V_2_0_0;
     private static final String VERSION_CHECKING_ERROR_MESSAGE = "Error when checking ES version";
 
     public static final String CHECK_NAME = "ElasticSearchStartUpCheck";
diff --git a/server/container/guice/elasticsearch/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java b/server/container/guice/elasticsearch/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
index 5f31c2b5f8..18520a7697 100644
--- a/server/container/guice/elasticsearch/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
+++ b/server/container/guice/elasticsearch/src/test/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModuleTest.java
@@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Set;
 
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.util.Host;
 import org.apache.james.utils.ExtendedClassLoader;
diff --git a/server/container/metrics/metrics-es-reporter-v7/pom.xml b/server/container/metrics/metrics-es-reporter-v7/pom.xml
index 4df4ef18c2..761848e9f6 100644
--- a/server/container/metrics/metrics-es-reporter-v7/pom.xml
+++ b/server/container/metrics/metrics-es-reporter-v7/pom.xml
@@ -32,12 +32,12 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/DockerElasticSearchExtension.java b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/DockerElasticSearchExtension.java
index 3058a6b12e..051df471bb 100644
--- a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/DockerElasticSearchExtension.java
+++ b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/DockerElasticSearchExtension.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.metric.es.v7;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
diff --git a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES2ReporterTest.java b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES2ReporterTest.java
index 4a04b74dd9..e077e2c74b 100644
--- a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES2ReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES2ReporterTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.metric.es.v7;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
 import org.apache.james.util.docker.Images;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
diff --git a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES6ReporterTest.java b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES6ReporterTest.java
index bce81e929d..5310333054 100644
--- a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES6ReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES6ReporterTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.metric.es.v7;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
 import org.apache.james.util.docker.Images;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
diff --git a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES7ReporterTest.java b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES7ReporterTest.java
index e5d718ee2a..ebb683c66e 100644
--- a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES7ReporterTest.java
+++ b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ES7ReporterTest.java
@@ -19,7 +19,7 @@
 
 package org.apache.james.metric.es.v7;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
diff --git a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ESReporterContract.java b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ESReporterContract.java
index 4b06dc4e34..452737cccc 100644
--- a/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ESReporterContract.java
+++ b/server/container/metrics/metrics-es-reporter-v7/src/test/java/org/apache/james/metric/es/v7/ESReporterContract.java
@@ -27,7 +27,7 @@ import java.util.Timer;
 import java.util.TimerTask;
 
 import org.apache.http.HttpStatus;
-import org.apache.james.backends.es.v7.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
 import org.apache.james.metrics.api.Metric;
 import org.apache.james.metrics.api.TimeMetric;
 import org.apache.james.metrics.dropwizard.DropWizardMetricFactory;
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
index 836d885467..2c26c90aed 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
@@ -23,7 +23,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
index efcb34db75..4eb6be771f 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
@@ -39,7 +39,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedThreadGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedThreadGetMethodTest.java
index 3c728e2513..e03c3e9f52 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedThreadGetMethodTest.java
+++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedThreadGetMethodTest.java
@@ -32,12 +32,12 @@ import org.apache.james.DockerElasticSearchExtension;
 import org.apache.james.JamesServerBuilder;
 import org.apache.james.JamesServerExtension;
 import org.apache.james.SearchConfiguration;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.jmap.rfc8621.contract.ThreadGetContract;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.modules.AwsS3BlobStoreExtension;
@@ -47,10 +47,10 @@ import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.awaitility.Awaitility;
 import org.awaitility.Durations;
 import org.awaitility.core.ConditionFactory;
-import org.elasticsearch.action.search.SearchRequest;
-import org.elasticsearch.client.RequestOptions;
-import org.elasticsearch.index.query.QueryBuilder;
-import org.elasticsearch.search.builder.SearchSourceBuilder;
+import org.opensearch.action.search.SearchRequest;
+import org.opensearch.client.RequestOptions;
+import org.opensearch.index.query.QueryBuilder;
+import org.opensearch.search.builder.SearchSourceBuilder;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
@@ -64,7 +64,7 @@ public class DistributedThreadGetMethodTest implements ThreadGetContract {
     private ReactorElasticSearchClient client;
 
     @RegisterExtension
-    org.apache.james.backends.es.v7.DockerElasticSearchExtension elasticSearch = new org.apache.james.backends.es.v7.DockerElasticSearchExtension();
+    org.apache.james.backends.opensearch.DockerElasticSearchExtension elasticSearch = new org.apache.james.backends.opensearch.DockerElasticSearchExtension();
 
     @RegisterExtension
     JamesServerExtension testExtension = new JamesServerBuilder<CassandraRabbitMQJamesConfiguration>(tmpDir ->
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
index 88983f30cd..71dac5db54 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
@@ -47,7 +47,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
index 8539ce7fc9..1c009845a7 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
@@ -68,7 +68,7 @@ import io.restassured.specification.RequestSpecification;
 @Tag(BasicFeature.TAG)
 class RabbitMQReindexingWithEventDeadLettersTest {
 
-    private static final String ELASTICSEARCH_LISTENER_GROUP = "org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup";
+    private static final String ELASTICSEARCH_LISTENER_GROUP = "org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup";
 
     private static final ConditionFactory CALMLY_AWAIT = Awaitility
         .with().pollInterval(Duration.ofMillis(100))
diff --git a/server/protocols/webadmin-integration-test/webadmin-integration-test-common/pom.xml b/server/protocols/webadmin-integration-test/webadmin-integration-test-common/pom.xml
index 27beba68a7..5412e4ca6c 100644
--- a/server/protocols/webadmin-integration-test/webadmin-integration-test-common/pom.xml
+++ b/server/protocols/webadmin-integration-test/webadmin-integration-test-common/pom.xml
@@ -35,7 +35,7 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
         </dependency>
         <dependency>
diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml b/server/protocols/webadmin/webadmin-mailbox/pom.xml
index 7adf268d12..07199bd60e 100644
--- a/server/protocols/webadmin/webadmin-mailbox/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml
@@ -35,7 +35,7 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-backends-es-v7</artifactId>
+            <artifactId>apache-james-backends-opensearch</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
@@ -49,11 +49,6 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-elasticsearch-v7</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-event-json</artifactId>
@@ -69,6 +64,11 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-opensearch</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-quota-search</artifactId>
@@ -81,7 +81,7 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>apache-james-mailbox-quota-search-elasticsearch-v7</artifactId>
+            <artifactId>apache-james-mailbox-quota-search-opensearch</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index 6e68b06511..97d02843b0 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -23,23 +23,23 @@ import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
 
-import org.apache.james.backends.es.v7.DockerElasticSearch;
-import org.apache.james.backends.es.v7.DockerElasticSearchSingleton;
-import org.apache.james.backends.es.v7.ElasticSearchConfiguration;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearch;
+import org.apache.james.backends.opensearch.DockerElasticSearchSingleton;
+import org.apache.james.backends.opensearch.ElasticSearchConfiguration;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.domainlist.lib.DomainListConfiguration;
 import org.apache.james.domainlist.memory.MemoryDomainList;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.quota.search.QuotaSearchTestSystem;
-import org.apache.james.quota.search.elasticsearch.v7.ElasticSearchQuotaSearcher;
-import org.apache.james.quota.search.elasticsearch.v7.QuotaRatioElasticSearchConstants;
-import org.apache.james.quota.search.elasticsearch.v7.QuotaSearchIndexCreationUtil;
-import org.apache.james.quota.search.elasticsearch.v7.UserRoutingKeyFactory;
-import org.apache.james.quota.search.elasticsearch.v7.events.ElasticSearchQuotaMailboxListener;
-import org.apache.james.quota.search.elasticsearch.v7.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.quota.search.opensearch.ElasticSearchQuotaSearcher;
+import org.apache.james.quota.search.opensearch.QuotaRatioElasticSearchConstants;
+import org.apache.james.quota.search.opensearch.QuotaSearchIndexCreationUtil;
+import org.apache.james.quota.search.opensearch.UserRoutingKeyFactory;
+import org.apache.james.quota.search.opensearch.events.ElasticSearchQuotaMailboxListener;
+import org.apache.james.quota.search.opensearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.user.memory.MemoryUsersRepository;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
index 753cf2951a..e0bdad4abc 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
@@ -41,24 +41,24 @@ import java.util.List;
 
 import javax.mail.Flags;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.Username;
 import org.apache.james.json.DTOConverter;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
index 99af975595..135a099dc9 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
@@ -55,9 +55,9 @@ import java.util.stream.IntStream;
 
 import javax.mail.Flags;
 
-import org.apache.james.backends.es.v7.DockerElasticSearchExtension;
-import org.apache.james.backends.es.v7.ElasticSearchIndexer;
-import org.apache.james.backends.es.v7.ReactorElasticSearchClient;
+import org.apache.james.backends.opensearch.DockerElasticSearchExtension;
+import org.apache.james.backends.opensearch.ElasticSearchIndexer;
+import org.apache.james.backends.opensearch.ReactorElasticSearchClient;
 import org.apache.james.core.Username;
 import org.apache.james.json.DTOConverter;
 import org.apache.james.mailbox.MailboxManager;
@@ -66,15 +66,15 @@ import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.elasticsearch.v7.IndexAttachments;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxElasticSearchConstants;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIdRoutingKeyFactory;
-import org.apache.james.mailbox.elasticsearch.v7.MailboxIndexCreationUtil;
-import org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex;
-import org.apache.james.mailbox.elasticsearch.v7.json.MessageToElasticSearchJson;
-import org.apache.james.mailbox.elasticsearch.v7.query.CriterionConverter;
-import org.apache.james.mailbox.elasticsearch.v7.query.QueryConverter;
-import org.apache.james.mailbox.elasticsearch.v7.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.opensearch.IndexAttachments;
+import org.apache.james.mailbox.opensearch.MailboxElasticSearchConstants;
+import org.apache.james.mailbox.opensearch.MailboxIdRoutingKeyFactory;
+import org.apache.james.mailbox.opensearch.MailboxIndexCreationUtil;
+import org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex;
+import org.apache.james.mailbox.opensearch.json.MessageToElasticSearchJson;
+import org.apache.james.mailbox.opensearch.query.CriterionConverter;
+import org.apache.james.mailbox.opensearch.query.QueryConverter;
+import org.apache.james.mailbox.opensearch.search.ElasticSearchSearcher;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxExistsException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
diff --git a/server/testing/src/main/java/org/apache/james/util/docker/Images.java b/server/testing/src/main/java/org/apache/james/util/docker/Images.java
index a4dd96fcc1..e872e1b98f 100644
--- a/server/testing/src/main/java/org/apache/james/util/docker/Images.java
+++ b/server/testing/src/main/java/org/apache/james/util/docker/Images.java
@@ -25,6 +25,7 @@ public interface Images {
     String ELASTICSEARCH_2 = "elasticsearch:2.4.6";
     String ELASTICSEARCH_6 = "docker.elastic.co/elasticsearch/elasticsearch:6.3.2";
     String ELASTICSEARCH_7 = "docker.elastic.co/elasticsearch/elasticsearch:7.10.2";
+    String OPENSEARCH = "opensearchproject/opensearch:2.0.0";
     String TIKA = "apache/tika:1.28.2";
     String SPAMASSASSIN = "instantlinux/spamassassin:3.4.6-1";
     String MOCK_SMTP_SERVER = "linagora/mock-smtp-server:0.4";
diff --git a/src/site/markdown/server/manage-guice-distributed-james.md b/src/site/markdown/server/manage-guice-distributed-james.md
index 09288fbbb8..bae8bd30cb 100644
--- a/src/site/markdown/server/manage-guice-distributed-james.md
+++ b/src/site/markdown/server/manage-guice-distributed-james.md
@@ -229,7 +229,7 @@ As explained in the [Mailbox Event Bus](#Mailbox_Event_Bus) section, processing
 
 Currently, an administrator can monitor indexation failures through `ERROR` log review. You can as well
 [list failed events](manage-webadmin.html#Listing_failed_events) by looking with the group called 
-`org.apache.james.mailbox.elasticsearch.v7.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup`.
+`org.apache.james.mailbox.opensearch.events.ElasticSearchListeningMessageSearchIndex$ElasticSearchListeningMessageSearchIndexGroup`.
 A first on-the-fly solution could be to just 
 [redeliver those group events with event dead letter](#Mailbox_Event_Bus).
 


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org