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:56 UTC

[james-project] branch master updated (edfbe9b647 -> a78fed6d3a)

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

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


    from edfbe9b647 Only unstable builds should be played for unstable profile in distributed-webadmin-integration-test
     new d4655bae7b JAMES-3771 Migrate to opensearch 2.0 and its high level rest java client
     new be92b241a0 JAMES-3771 Upgrade to opensearch 2.1.0
     new a78fed6d3a JAMES-3771 Add upgrade instructions for elasticsearch migration to Opensearch

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../{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 +-
 upgrade-instructions.md                            |  19 ++
 163 files changed, 733 insertions(+), 1002 deletions(-)
 rename backends-common/{elasticsearch-v7 => opensearch}/pom.xml (89%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/AliasName.java (97%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/ClientProvider.java (92%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/DeleteByQueryPerformer.java (90%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/DocumentId.java (95%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/ElasticSearchConfiguration.java (98%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/ElasticSearchHealthCheck.java (92%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/ElasticSearchIndexer.java (88%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/IndexCreationFactory.java (94%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/IndexName.java (97%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/ReactorElasticSearchClient.java (72%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/ReadAliasName.java (96%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/RoutingKey.java (96%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/UpdatedRepresentation.java (96%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/WriteAliasName.java (96%)
 rename backends-common/{elasticsearch-v7/src/main/java/org/apache/james/backends/es/v7 => opensearch/src/main/java/org/apache/james/backends/opensearch}/search/ScrolledSearch.java (89%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/AliasNameTest.java (96%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java (85%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java (90%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ClientProviderImplConnectionContract.java (90%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ClientProviderImplConnectionNoAuthESTest.java (89%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ClientProviderTest.java (97%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/DockerAuthElasticSearchSingleton.java (96%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/DockerElasticSearch.java (94%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/DockerElasticSearchExtension.java (98%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/DockerElasticSearchRule.java (97%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/DockerElasticSearchSingleton.java (96%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/DocumentIdTest.java (97%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ElasticSearchClusterExtension.java (98%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ElasticSearchConfigurationTest.java (98%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ElasticSearchHealthCheckConnectionTest.java (98%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ElasticSearchHealthCheckTest.java (87%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/ElasticSearchIndexerTest.java (96%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/IndexCreationFactoryTest.java (92%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/RoutingKeyTest.java (97%)
 rename backends-common/{elasticsearch-v7/src/test/java/org/apache/james/backends/es/v7 => opensearch/src/test/java/org/apache/james/backends/opensearch}/search/ScrolledSearchTest.java (89%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/NginxDockerfile (100%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/README.md (100%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/default.crt (100%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/default.key (100%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/nginx-conf/passwd (100%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf (100%)
 rename backends-common/{elasticsearch-v7 => opensearch}/src/test/resources/auth-es/server.jks (100%)
 delete mode 100644 mailbox/opensearch/example_french_index.json
 rename mailbox/{elasticsearch-v7 => opensearch}/pom.xml (95%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/ElasticSearchMailboxConfiguration.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/IndexAttachments.java (96%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/MailboxElasticSearchConstants.java (87%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/MailboxIdRoutingKeyFactory.java (93%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/MailboxIndexCreationUtil.java (84%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/MailboxMappingFactory.java (54%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/events/ElasticSearchListeningMessageSearchIndex.java (87%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/EMailer.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/EMailers.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/HeaderCollection.java (99%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/IndexableMessage.java (99%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/JsonMessageConstants.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/MessageToElasticSearchJson.java (96%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/MessageUpdateJson.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/MimePart.java (99%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/MimePartContainerBuilder.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/MimePartParser.java (99%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/RootMimePartContainerBuilder.java (98%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/SerializableMessage.java (95%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/json/Subjects.java (97%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/query/CriterionConverter.java (94%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/query/DateResolutionFormatter.java (98%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/query/QueryConverter.java (88%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/query/SortConverter.java (89%)
 rename mailbox/{elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/main/java/org/apache/james/mailbox/opensearch}/search/ElasticSearchSearcher.java (85%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/reporting-site/site.xml (100%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/ElasticSearchIntegrationTest.java (95%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/ElasticSearchMailboxConfigurationTest.java (97%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/MailboxIdRoutingKeyFactoryTest.java (93%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/events/ElasticSearchListeningMessageSearchIndexTest.java (94%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/EMailerTest.java (96%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/EMailersTest.java (97%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/FieldImpl.java (97%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/HeaderCollectionTest.java (99%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/IndexableMessageTest.java (99%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/MessageToElasticSearchJsonTest.java (99%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/MimePartTest.java (97%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/json/SubjectsTest.java (97%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/query/DateResolutionFormatterTest.java (98%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/query/SearchQueryTest.java (97%)
 rename mailbox/{elasticsearch-v7/src/test/java/org/apache/james/mailbox/elasticsearch/v7 => opensearch/src/test/java/org/apache/james/mailbox/opensearch}/search/ElasticSearchSearcherTest.java (87%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/bodyMakeTikaToFail.eml (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/emailWith3Attachments.eml (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/htmlContent.txt (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/inlined-mixed.eml (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/inlined-mixed.json (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/mailCustomDateHeader.eml (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/mailCustomStringHeader.eml (100%)
 rename mailbox/{elasticsearch-v7 => opensearch}/src/test/resources/eml/mailWithHeaders.eml (100%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7 => quota-search-opensearch}/pom.xml (92%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/ElasticSearchQuotaConfiguration.java (96%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/ElasticSearchQuotaSearcher.java (82%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/QuotaQueryConverter.java (85%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/QuotaRatioElasticSearchConstants.java (84%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/QuotaRatioMappingFactory.java (69%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/QuotaSearchIndexCreationUtil.java (86%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/UserRoutingKeyFactory.java (93%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/events/ElasticSearchQuotaMailboxListener.java (90%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/json/JsonMessageConstants.java (95%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/json/QuotaRatioAsJson.java (98%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/main/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch}/json/QuotaRatioToElasticSearchJson.java (97%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/ElasticSearchQuotaConfigurationTest.java (95%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/ElasticSearchQuotaSearchTestSystemExtension.java (90%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/ElasticSearchQuotaSearcherTest.java (98%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/QuotaQueryConverterTest.java (85%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/UserRoutingKeyFactoryTest.java (93%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/events/ElasticSearchQuotaMailboxListenerTest.java (83%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/json/QuotaRatioAsJsonTest.java (98%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7/src/test/java/org/apache/james/quota/search/elasticsearch/v7 => quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch}/json/QuotaRatioToElasticSearchJsonTest.java (98%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7 => quota-search-opensearch}/src/test/resources/quotaRatio.json (100%)
 rename mailbox/plugin/{quota-search-elasticsearch-v7 => quota-search-opensearch}/src/test/resources/quotaRatioNoDomain.json (100%)


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


[james-project] 02/03: JAMES-3771 Upgrade to opensearch 2.1.0

Posted by rc...@apache.org.
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 be92b241a0807156aae573584df909f65477deb3
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Mon Aug 1 11:43:33 2022 +0700

    JAMES-3771 Upgrade to opensearch 2.1.0
---
 backends-common/opensearch/pom.xml                                    | 2 +-
 server/testing/src/main/java/org/apache/james/util/docker/Images.java | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/backends-common/opensearch/pom.xml b/backends-common/opensearch/pom.xml
index 6aa2231aaa..c70405d6df 100644
--- a/backends-common/opensearch/pom.xml
+++ b/backends-common/opensearch/pom.xml
@@ -87,7 +87,7 @@
         <dependency>
             <groupId>org.opensearch.client</groupId>
             <artifactId>opensearch-rest-high-level-client</artifactId>
-            <version>2.0.0</version>
+            <version>2.1.0</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
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 e872e1b98f..87054f065a 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,7 +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 OPENSEARCH = "opensearchproject/opensearch:2.1.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";


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


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

Posted by rc...@apache.org.
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


[james-project] 03/03: JAMES-3771 Add upgrade instructions for elasticsearch migration to Opensearch

Posted by rc...@apache.org.
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 a78fed6d3a3f79e34c6b8f6b14c2486419b77b2d
Author: Rene Cordier <rc...@linagora.com>
AuthorDate: Mon Aug 1 15:26:53 2022 +0700

    JAMES-3771 Add upgrade instructions for elasticsearch migration to Opensearch
---
 upgrade-instructions.md | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index 1e02f2f8b3..cceef7ae3b 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -18,6 +18,25 @@ Change list:
 
 - [Adding authorized_users column to user table](#adding-authorized_users-column-to-user-table)
 - [Migration to Cassandra driver 4](#migration-to-cassandra-driver-4)
+- [Migration to OpenSearch](#migration-to-opensearch)
+
+### Migration to OpenSearch
+
+Date: 01/08/2022
+
+Concerned products: Distributed James, Cassandra James
+
+ElasticSearch v7 being EOL and upper versions being moved to a non-OSI compliant license (java clients included),
+it's been decided to migrate to OpenSearch that is a fork of ElasticSearch 7.10 and using Apache v2 license.
+
+You should migrate your ElasticSearch servers from version 7 to OpenSearch 2.1 before upgrading James.
+
+Users can either perform a migration of their data from version 7 to OpenSearch (documentation
+[here](https://opensearch.org/docs/latest/upgrade-to/upgrade-to/)) or might start from an empty
+Opensearch v2.1 cluster and [reindex data](https://github.com/apache/james-project/blob/master/src/site/markdown/server/manage-webadmin.md#reindexing-all-mails).
+
+Keep in mind as well that the group listeners related to ElasticSearch changed names.
+You would need to manually delete the bindings from the event queues in RabbitMQ before restarting James.
 
 ### Migration to Cassandra driver 4
 


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