diff --git a/.env.unix.example b/.env.unix.example
index 5e3cb074dc4c043b4a17bfd606ceb852a1f658d5..e527bca539e3ba4ea35a87269ce4084e6e38c300 100644
--- a/.env.unix.example
+++ b/.env.unix.example
@@ -4,7 +4,8 @@ JWT_ISSUER="http://localhost/realms/dbrepo"
 JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
 JWT_CERT="MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk="
 SHARED_FILESYSTEM=/tmp
-ELASTIC_PASSWORD=elastic
+SEARCH_USERNAME=admin
+SEARCH_PASSWORD=admin
 METADATA_DB=fda
 METADATA_USERNAME=root
 METADATA_PASSWORD=dbrepo
diff --git a/README.md b/README.md
index 1fde55325b7c626ff08179ba7411a8e01816aeee..337f5d812907c18e02e495b0b2e7ce5d42e07d94 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@ $ docker-compose build --parallel
 
 A more detailed description on how
 to get started is available at our documentation
-website: [https://dbrepo-docs.ossdip.at/getting-started/](https://dbrepo-docs.ossdip.at/getting-started/)
+website: [https://www.ifs.tuwien.ac.at/infrastructures/dbrepo//getting-started/](https://www.ifs.tuwien.ac.at/infrastructures/dbrepo//getting-started/)
 
 ### Run
 
diff --git a/dbrepo-container-service/Dockerfile b/dbrepo-container-service/Dockerfile
index 9e8c839383c3441553d11fe8aeb473133f7e3b82..9b27413bd73028ad07a0ca6ec182afa6f2131d7c 100644
--- a/dbrepo-container-service/Dockerfile
+++ b/dbrepo-container-service/Dockerfile
@@ -30,8 +30,8 @@ ENV METADATA_USERNAME=root
 ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
-ENV ELASTIC_USERNAME=elastic
-ENV ELASTIC_PASSWORD=elastic
+ENV SEARCH_USERNAME=admin
+ENV SEARCH_PASSWORD=admin
 ENV SHARED_FILESYSTEM=/tmp
 ENV USER_NETWORK=userdb
 ENV LOG_LEVEL=debug
diff --git a/dbrepo-container-service/pom.xml b/dbrepo-container-service/pom.xml
index c17167494db72c163d1304779485e5cf338e92f0..8c4c65ef615f46ca8d19fcf3d980e91f23016a65 100644
--- a/dbrepo-container-service/pom.xml
+++ b/dbrepo-container-service/pom.xml
@@ -30,6 +30,7 @@
         <jacoco.version>0.8.10</jacoco.version>
         <jwt.version>4.3.0</jwt.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -88,6 +89,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- Entity and API -->
         <dependency>
             <groupId>at.tuwien</groupId>
@@ -108,6 +119,12 @@
             <version>${mariadb.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java
index 7ef30669bce222658b191aa5a5dd5f05e2cb811c..132ad5519db7a8b891efc4328aa17433d806d9f7 100644
--- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java
+++ b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java
@@ -2,16 +2,17 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
-@SpringBootApplication
 @EnableJpaAuditing
 @EnableTransactionManagement
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
 @EntityScan(basePackages = {"at.tuwien.entities"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoContainerManagingApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml
index 9760a7ba9def6da76170e5f68bdb68903ec12d13..d08d2341bd64670e50c43cd32915eaebd595bfe6 100644
--- a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml
@@ -27,10 +27,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 springdoc.swagger-ui.enabled: true
 server:
@@ -50,4 +50,4 @@ fda:
     public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB
   client_secret: client-secret
   client_id: dbrepo-client
-  gateway.endpoint: http://localhost
\ No newline at end of file
+  gateway.endpoint: http://localhost
diff --git a/dbrepo-container-service/rest-service/src/main/resources/application.yml b/dbrepo-container-service/rest-service/src/main/resources/application.yml
index 70619e94b9d9ea34578c06eb8e1fc42b38b7ebb0..554fe0c8f2bde3c837e10f5234759ca73e13a344 100644
--- a/dbrepo-container-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-container-service/rest-service/src/main/resources/application.yml
@@ -1,5 +1,7 @@
 app.version: '@project.version@'
 spring:
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   main.banner-mode: off
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
@@ -27,10 +29,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: "${ELASTIC_USERNAME}"
-    uris: http://search-db:9200
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 springdoc.swagger-ui.enabled: true
 server:
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java
index b5b9a9deb7197d174b4ccc3c377143052dac1693..acaa7b1c87fa808b6c6af90cb63d6e8a6410f82a 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ContainerEndpointUnitTest.java
@@ -2,12 +2,11 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.container.*;
-import at.tuwien.config.DockerConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.ContainerEndpoint;
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.impl.ContainerServiceImpl;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java
index 689ac6ea555c3d00418c055ad72307b51653a552..f6b05e147582fc78bbf45716dce770d375e8e2dc 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointIntegrationTest.java
@@ -1,19 +1,12 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.api.container.image.ImageBriefDto;
-import at.tuwien.api.container.image.ImageChangeDto;
-import at.tuwien.api.container.image.ImageCreateDto;
-import at.tuwien.api.container.image.ImageDto;
 import at.tuwien.config.DockerConfig;
-import at.tuwien.config.DockerDaemonConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.ImageEndpoint;
-import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.ImageRepository;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -22,20 +15,10 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.test.context.support.WithAnonymousUser;
 import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-import java.security.Principal;
-import java.util.List;
-import java.util.Optional;
-
-import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.when;
 
 @Log4j2
 @ExtendWith(SpringExtension.class)
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java
index 77d238be78c50dd20ea144b4a2c90d1c2aa720d6..32380858b126df2d5867d13f29743790517119b1 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/endpoint/ImageEndpointUnitTest.java
@@ -10,7 +10,7 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.ImageEndpoint;
 import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.impl.ImageServiceImpl;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
index 35765c567f3a2d55a32a16df1f3b414f030a7978..20f54cca5a41d74b37fcc278d372f00cd82971b1 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
@@ -7,10 +7,10 @@ import at.tuwien.config.DockerConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.repository.jpa.ImageRepository;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
+import at.tuwien.repository.mdb.ImageRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java
index cdbcd6b052bf3918c8c4ff44e5904529288d92de..5231fe2eef09c2f72d4a994265e7c41fe9c1123f 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java
@@ -4,9 +4,9 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.api.container.image.ImageCreateDto;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.repository.jpa.ImageRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
+import at.tuwien.repository.mdb.ImageRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.impl.ImageServiceImpl;
 import lombok.extern.log4j.Log4j2;
 import org.apache.commons.lang3.RandomUtils;
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java
index 82b9162e4a3f0ac5696c4596182d0a5cae740fbb..f92fa9102ad43cc1d3c9f0abcfccfdc354d4b111 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceUnitTest.java
@@ -6,7 +6,7 @@ import at.tuwien.api.container.image.ImageCreateDto;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.ImageRepository;
+import at.tuwien.repository.mdb.ImageRepository;
 import at.tuwien.service.impl.ImageServiceImpl;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java
index d7b341c23a0ac741cf6422906c1cc20c984ae038..5de85233045cedd229443e0c6113b99ca4d8c691 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/PersistenceIntegrationTest.java
@@ -3,8 +3,8 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.ImageNotFoundException;
-import at.tuwien.repository.jpa.ImageRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.ImageRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.impl.ImageServiceImpl;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
@@ -15,7 +15,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
-import org.springframework.transaction.UnexpectedRollbackException;
 
 import static org.junit.jupiter.api.Assertions.*;
 
diff --git a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
index a1a06e35c2e8fec2b8de56c2f56c10d7de307308..de8aeb7439933dbdbd13df95219fdb2aa9111cf1 100644
--- a/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
+++ b/dbrepo-container-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
@@ -4,8 +4,8 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
deleted file mode 100644
index c1a5d756b7af9d163766f3a9fae3c31cf157a77c..0000000000000000000000000000000000000000
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package at.tuwien.repository.jpa;
-
-import at.tuwien.entities.user.Realm;
-import at.tuwien.entities.user.User;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-import java.util.UUID;
-
-@Repository
-public interface RealmRepository extends JpaRepository<Realm, UUID> {
-
-}
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 91%
rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index df2a6eba16e4bdbefa3a5de7eaff1dea507ed8ad..39a041738c73ed8ff3dd899cf6ea6d2a0e8b5c98 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 88%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index 688993ab3ca2e32edeb59b6c66dc838f58333b02..c11a773abc70ade28fdf7aa45845043fafcdd314 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
similarity index 88%
rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
index f76f9976d6de9884579ac242ce616d6c0caf099e..23883215860e412b4136030f1308918bab91972b 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.Identifier;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ImageDateRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java
similarity index 64%
rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ImageDateRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java
index c2af74312471ee253dc31be54ca6c30381b88438..889144818dacc9b5728c13a0e84a4fb6ec39e807 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ImageDateRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageDateRepository.java
@@ -1,10 +1,11 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImageDate;
+import at.tuwien.entities.container.image.ContainerImageDateKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface ImageDateRepository extends JpaRepository<ContainerImageDate, Long> {
+public interface ImageDateRepository extends JpaRepository<ContainerImageDate, ContainerImageDateKey> {
 
 }
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 91%
rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index ca60fb1a740ae2047029d977b8ed96acae270c83..3e9b129fc0e32e423e909736f09a89ed8bc35acf 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
similarity index 88%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
index 5b5855dec88d3e3ef8d032369a7d6af6956a702e..7b53e7245983c7ca848da7c1175e0158e2f2a930 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Realm;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 90%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 9eb0b5190252b7e1890deb7717fe9b2afc133d41..42d09c3e9eaecff5b277e10a724ebfb857a91c8b 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index e25363f4436dda27098d56a8f1a02913b2c2267a..2a0008f4f6406319663e1622138d2c3635a34084 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -2,7 +2,6 @@ package at.tuwien.service.impl;
 
 import at.tuwien.api.container.ContainerCreateRequestDto;
 import at.tuwien.api.container.ContainerDto;
-import at.tuwien.api.container.ContainerStateDto;
 import at.tuwien.config.DockerDaemonConfig;
 import at.tuwien.entities.container.Container;
 import at.tuwien.entities.container.image.ContainerImage;
@@ -10,8 +9,8 @@ import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.ContainerMapper;
 import at.tuwien.mapper.ImageMapper;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.repository.jpa.ImageRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
+import at.tuwien.repository.mdb.ImageRepository;
 import at.tuwien.service.ContainerService;
 import at.tuwien.service.UserService;
 import com.github.dockerjava.api.DockerClient;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java
index c7e16a398dff015c0da0131759bf635163591d6a..a9f2f4f7c1c250fe1497fec0f9338622f4a43bef 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/ImageServiceImpl.java
@@ -6,7 +6,7 @@ import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.ImageMapper;
-import at.tuwien.repository.jpa.ImageRepository;
+import at.tuwien.repository.mdb.ImageRepository;
 import at.tuwien.service.ImageService;
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.async.ResultCallback;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 52fec3af7ca856095581bd2dae572134ceb263b0..62b9995acbd5c66fa8e48fc8305db81559119795 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-database-service/Dockerfile b/dbrepo-database-service/Dockerfile
index bf79827ee7dd87c0b008b564516ac582764a3c5e..c634dc395645309c3cf74124080c5449848a1e7c 100644
--- a/dbrepo-database-service/Dockerfile
+++ b/dbrepo-database-service/Dockerfile
@@ -30,8 +30,8 @@ ENV METADATA_USERNAME=root
 ENV METADATA_PASSWORD=dbrepo
 ENV BROKER_USERNAME=fda
 ENV BROKER_PASSWORD=fda
-ENV ELASTIC_USERNAME=elastic
-ENV ELASTIC_PASSWORD=elastic
+ENV SEARCH_USERNAME=admin
+ENV SEARCH_PASSWORD=admin
 ENV GATEWAY_ENDPOINT=http://gateway-service
 ENV LOG_LEVEL=debug
 ENV CLIENT_ID="dbrepo-client"
diff --git a/dbrepo-database-service/pom.xml b/dbrepo-database-service/pom.xml
index d694d035a95e4122a827f9a099729427a7acffd5..dc1a4e444643c1aa0f41918c0852b2a3e096d7cf 100644
--- a/dbrepo-database-service/pom.xml
+++ b/dbrepo-database-service/pom.xml
@@ -31,6 +31,7 @@
         <c3p0.version>0.9.5.5</c3p0.version>
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -67,12 +68,6 @@
             <artifactId>dbrepo-metadata-db-entites</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <!-- elasticsearch -->
-        <dependency>
-            <groupId>co.elastic.clients</groupId>
-            <artifactId>elasticsearch-java</artifactId>
-            <version>${elasticsearch-client.version}</version>
-        </dependency>
         <!-- AMQP -->
         <dependency>
             <groupId>org.springframework.amqp</groupId>
@@ -115,6 +110,21 @@
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>opensearch-java</artifactId>
+            <version>2.5.0</version>
+        </dependency>
         <!-- Entity, API, QueryStore -->
         <dependency>
             <groupId>at.tuwien</groupId>
@@ -135,6 +145,12 @@
             <scope>compile</scope>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java
index 306944de33f8a180935fdbf6cd5aff3bf4b42667..50eb96b7206e0f6fdb616a4cb56b1a6ccf3ecbe6 100644
--- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java
+++ b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java
@@ -2,18 +2,19 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
-@SpringBootApplication
 @EnableJpaAuditing
 @EnableTransactionManagement
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
 @EntityScan(basePackages = {"at.tuwien.entities"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoDatabaseManagingApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java
index 40a45b0cce76ed6d69c2bbedb344a9fb9ea64493..d1e815abc1b709231c7685ebe7fb264478ba57b4 100644
--- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java
+++ b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/endpoints/DatabaseEndpoint.java
@@ -1,6 +1,5 @@
 package at.tuwien.endpoints;
 
-import at.tuwien.api.container.ContainerBriefDto;
 import at.tuwien.api.container.ContainerDto;
 import at.tuwien.api.database.*;
 import at.tuwien.api.error.ApiErrorDto;
@@ -10,7 +9,7 @@ import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DatabaseMapper;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
 import at.tuwien.service.*;
 import at.tuwien.service.impl.MariaDbServiceImpl;
 import io.micrometer.core.annotation.Timed;
diff --git a/dbrepo-database-service/rest-service/src/main/resources/application-local.yml b/dbrepo-database-service/rest-service/src/main/resources/application-local.yml
index 1d647d4d6f0a05a54e73dc6fb159cb2f2b8baabc..a4d319886574e497b2eb4d374b33c4fb41113c50 100644
--- a/dbrepo-database-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-database-service/rest-service/src/main/resources/application-local.yml
@@ -27,10 +27,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    password: admin
+    username: admin
+    uris: localhost:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 server:
   port: 9092
diff --git a/dbrepo-database-service/rest-service/src/main/resources/application.yml b/dbrepo-database-service/rest-service/src/main/resources/application.yml
index ba7ad2434e03693d0413759fcec3c985c3984586..a13a452a28c19896f8cccbe596f4bd007cb584a8 100644
--- a/dbrepo-database-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-database-service/rest-service/src/main/resources/application.yml
@@ -27,10 +27,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: "${ELASTIC_USERNAME}"
-    uris: http://search-db:9200
+  opensearch:
+    password: "${SEARCH_PASSWORD}"
+    username: "${SEARCH_USERNAME}"
+    uris: search-db:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 server:
   port: 9092
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java
index ac03038159766dd43803905ef9a2c90df841e20c..df61f6197b64646980cf1fa585e62478c478ecdc 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/AccessEndpointUnitTest.java
@@ -13,11 +13,11 @@ import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.AccessMapper;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.service.AccessService;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +27,6 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.test.context.support.WithAnonymousUser;
 import org.springframework.security.test.context.support.WithMockUser;
-import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.security.Principal;
@@ -49,6 +48,9 @@ public class AccessEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexInitializer;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private Channel channel;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
index cab709d9c6692a9e2c0cc236520751659ec4306d..e6fd7b8510fc1b0b8830fb6a862e096ac042fce8 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
@@ -2,6 +2,7 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -32,6 +33,9 @@ public class ActuatorComponentTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @Test
     public void actuatorInfo_succeeds() throws Exception {
         this.mockMvc.perform(get("/actuator/info"))
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java
index 4cf0fc3edb0a0dc7898a07e5de495c825be5456b..513d93fa263f4f2c8485c83b7d51c76bc0ff2044 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/DatabaseEndpointUnitTest.java
@@ -2,7 +2,6 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.*;
-import at.tuwien.config.H2Utils;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.DatabaseEndpoint;
@@ -10,13 +9,11 @@ import at.tuwien.entities.container.Container;
 import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.DatabaseIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
+import at.tuwien.repository.mdb.*;
 import at.tuwien.service.*;
 import at.tuwien.service.impl.MariaDbServiceImpl;
-import at.tuwien.test.BaseTest;
 import com.rabbitmq.client.Channel;
-import lombok.With;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -25,10 +22,8 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
 import org.springframework.security.test.context.support.WithAnonymousUser;
 import org.springframework.security.test.context.support.WithMockUser;
-import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.security.Principal;
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java
index b102cbf8519f3389df6983a4a507faead88c70f9..8d295059ec299c3bc8216a795f1a8927ce62fc53 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/LicenseEndpointUnitTest.java
@@ -5,8 +5,8 @@ import at.tuwien.api.database.*;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.LicenseEndpoint;
-import at.tuwien.repository.jpa.LicenseRepository;
-import at.tuwien.test.BaseTest;
+import at.tuwien.repository.mdb.LicenseRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -16,7 +16,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
-import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.util.List;
@@ -38,6 +37,9 @@ public class LicenseEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private LicenseRepository licenseRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
index 2f448ca36e90e3d81aac0e68ddaa7304fbeb5af9..fcd6bd8984d88d5ebd6821e3a415911a16727597 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
@@ -2,6 +2,7 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -32,6 +33,9 @@ public class SwaggerComponentTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @Test
     public void swaggerUi_succeeds() throws Exception {
         this.mockMvc.perform(get("/swagger-ui/index.html"))
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java
index 4d920fbbbe30bb091672a3b349f6d9eb0d1886d0..db1c4a966ce040c514d82bc11db8a4621c8340c5 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/gateway/BrokerServiceGatewayTest.java
@@ -5,6 +5,7 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.BrokerVirtualHostCreationException;
 import at.tuwien.exception.BrokerVirtualHostGrantException;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.test.BaseTest;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
@@ -41,6 +42,9 @@ public class BrokerServiceGatewayTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     @Qualifier("brokerRestTemplate")
     private RestTemplate restTemplate;
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java
index 766ba8ed505cf190bc485c363a576bbdd31993d6..af5a088a39a82748b1d12211ef852e2271ef2a0f 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/mapper/DatabaseMapperTest.java
@@ -5,6 +5,7 @@ import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.api.user.UserBriefDto;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.test.BaseTest;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
@@ -31,6 +32,9 @@ public class DatabaseMapperTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @Autowired
     private DatabaseMapper databaseMapper;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java
index bcb86edb3372d4f70ca65bd13212657b159427c4..2a5de492d3518b01997b71fceb501d61a287fc62 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceIntegrationTest.java
@@ -5,15 +5,13 @@ import at.tuwien.api.database.AccessTypeDto;
 import at.tuwien.api.database.DatabaseGiveAccessDto;
 import at.tuwien.api.database.DatabaseModifyAccessDto;
 import at.tuwien.config.DockerConfig;
-import at.tuwien.config.H2Utils;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.AccessType;
-import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.DatabaseAccess;
-import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
@@ -50,6 +48,9 @@ public class AccessServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @Autowired
     private ImageRepository imageRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java
index a530ea55f1073b9b96d9c96a35168900557259cb..e7221b3642ae1433ccc698c13e5dc53db9c4628c 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/AccessServiceUnitTest.java
@@ -3,17 +3,16 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.AccessTypeDto;
 import at.tuwien.api.database.DatabaseModifyAccessDto;
-import at.tuwien.config.H2Utils;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.AccessType;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.AccessDeniedException;
 import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +41,9 @@ public class AccessServiceUnitTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private DatabaseRepository databaseRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java
index 1117c0b9a8f7935e5186113617326c8d5155874f..eab873555a3b1413c95fa7aa441405f3a3f81644 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceComponentTest.java
@@ -5,10 +5,10 @@ import at.tuwien.api.database.DatabaseCreateDto;
 import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.config.*;
 import at.tuwien.entities.database.Database;
-import at.tuwien.repository.elastic.DatabaseIdxRepository;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.repository.jpa.DatabaseRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.impl.MariaDbServiceImpl;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
index dde3a3f802b268d79d5e9b9f3f2a2e3ce9ab085e..5afc03b3bdd9fbad3382ab37d32e62216f8be7f2 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
@@ -10,14 +10,12 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.MariaDbConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.Database;
-import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.DatabaseIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
+import at.tuwien.repository.mdb.*;
 import at.tuwien.service.impl.MariaDbServiceImpl;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.apache.http.auth.BasicUserPrincipal;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,10 +25,7 @@ import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.io.File;
-import java.security.Principal;
 import java.sql.SQLException;
-import java.util.List;
-import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.any;
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
index 9d02bb53f434b65aae36bbf9ec8ef6f7ee1bb74d..afd7ddcaf6ab04ce909121ba2b0486ac540d2dab 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceUnitTest.java
@@ -8,11 +8,11 @@ import at.tuwien.entities.container.Container;
 import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.service.impl.MariaDbServiceImpl;
 import at.tuwien.service.impl.RabbitMqServiceImpl;
-import at.tuwien.test.BaseTest;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -42,6 +42,9 @@ public class DatabaseServiceUnitTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private RabbitMqServiceImpl rabbitMqService;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
index d442fccb1bcfc13ad97ae50b8e48a699be9f4ca8..b39fa1b5074899bf82a26e4fd8a659a39cfe573f 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
@@ -1,22 +1,13 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.config.DockerConfig;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.identifier.Identifier;
-import at.tuwien.entities.identifier.IdentifierType;
-import at.tuwien.exception.AmqpException;
-import at.tuwien.exception.IdentifierNotFoundException;
-import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.repository.jpa.*;
-import at.tuwien.service.impl.RabbitMqServiceImpl;
-import at.tuwien.utils.AmqpUtils;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.apache.http.auth.BasicUserPrincipal;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -26,11 +17,9 @@ import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-import java.security.Principal;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.Mockito.when;
 
 @Log4j2
 @SpringBootTest
@@ -47,6 +36,9 @@ public class IdentifierServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @Autowired
     private RealmRepository realmRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java
index 98ae89f24169005a2e0caa5cd9035351365b9d7b..3cf9f68def035e2218d96bbc8ae6ad39c9cd5137 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/LicenseServiceIntegrationTest.java
@@ -4,9 +4,9 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.License;
-import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.LicenseNotFoundException;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
@@ -15,7 +15,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.util.List;
@@ -37,6 +36,9 @@ public class LicenseServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @Autowired
     private LicenseRepository licenseRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
index 17e63a0882420e21a3f84ce24b0f3e0851adaff6..800da8a157faa805f81d1b7b2bf70e537974048a 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
@@ -8,12 +8,12 @@ import at.tuwien.exception.AmqpException;
 import at.tuwien.exception.BrokerVirtualHostCreationException;
 import at.tuwien.exception.BrokerVirtualHostGrantException;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.service.impl.RabbitMqServiceImpl;
 import at.tuwien.utils.AmqpUtils;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.apache.http.auth.BasicUserPrincipal;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
@@ -23,7 +23,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-import java.security.Principal;
 import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
@@ -40,6 +39,9 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private DatabaseRepository databaseRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java
index b01dcfbd68b57d4ee5271443a86633303b15f9a0..eeaaf10655ce2f48c8c857086137773b4de4fabd 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceUnitTest.java
@@ -1,19 +1,16 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.config.DockerConfig;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.AmqpException;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.service.impl.RabbitMqServiceImpl;
-import at.tuwien.utils.AmqpUtils;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -22,11 +19,9 @@ import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import java.io.IOException;
-import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.when;
 
 @Log4j2
 @SpringBootTest
@@ -39,6 +34,9 @@ public class MessageQueueServiceUnitTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private DatabaseRepository databaseRepository;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java
index e52110c7ff7cca2c40b13b091c7d0f4bb8359be1..726405881c79d5b8876ad85c4d272d2e1b759f84 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/QueryStoreServiceIntegrationTest.java
@@ -7,7 +7,8 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DatabaseMapper;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.service.impl.HibernateConnector;
 import at.tuwien.service.impl.QueryStoreServiceImpl;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
@@ -37,6 +38,9 @@ public class QueryStoreServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private Channel channel;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
index 6c4c0d0b74bc6b2d2b414adfe87accd87f2c93b4..47f2a25d7534c85ab1a33210cbfaabaa3779da81 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
@@ -3,13 +3,11 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
-import at.tuwien.entities.database.License;
 import at.tuwien.entities.user.User;
-import at.tuwien.exception.LicenseNotFoundException;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.LicenseRepository;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
@@ -20,7 +18,6 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
-import java.util.List;
 import java.util.UUID;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -37,6 +34,9 @@ public class UserServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
+
     @MockBean
     private Channel channel;
 
diff --git a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/utils/FileUtilTest.java b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/utils/FileUtilTest.java
index 3dd48bcc4fa10d8d0d31d07957b6361f5aaba271..026b0f429825689995129930aced2044d94d107c 100644
--- a/dbrepo-database-service/rest-service/src/test/java/at/tuwien/utils/FileUtilTest.java
+++ b/dbrepo-database-service/rest-service/src/test/java/at/tuwien/utils/FileUtilTest.java
@@ -3,6 +3,7 @@ package at.tuwien.utils;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
 import at.tuwien.test.BaseTest;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
@@ -27,7 +28,10 @@ public class FileUtilTest extends BaseUnitTest {
     private ReadyConfig readyConfig;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private DatabaseIdxRepository databaseIdxRepository;
 
     @MockBean
     private Channel channel;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
deleted file mode 100644
index 58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65..0000000000000000000000000000000000000000
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package at.tuwien.config;
-
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.json.jackson.JacksonJsonpMapper;
-import co.elastic.clients.transport.ElasticsearchTransport;
-import co.elastic.clients.transport.rest_client.RestClientTransport;
-import lombok.extern.log4j.Log4j2;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.elasticsearch.client.RestClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Log4j2
-@Configuration
-public class ElasticsearchConfig {
-
-    @Value("${spring.elasticsearch.uris}")
-    private String elasticEndpoint;
-
-    @Value("${spring.elasticsearch.username}")
-    private String elasticUsername;
-
-    @Value("${spring.elasticsearch.password}")
-    private String elasticPassword;
-
-    @Bean
-    public ElasticsearchClient elasticsearchClient() {
-        log.debug("elastic endpoint={}", elasticEndpoint);
-        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword));
-        final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint))
-                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
-                        .setDefaultCredentialsProvider(credentialsProvider))
-                .build();
-        ElasticsearchTransport transport = new RestClientTransport(
-                restClient, new JacksonJsonpMapper());
-        return new ElasticsearchClient(transport);
-    }
-
-}
\ No newline at end of file
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/IndexConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/IndexConfig.java
index dc0e46355d1aa2cc10ed1c2137bba891a95ad4e2..a33578d1293ab9ccacca9f479b042a628385ffa5 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/config/IndexConfig.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/config/IndexConfig.java
@@ -2,15 +2,11 @@ package at.tuwien.config;
 
 import at.tuwien.api.database.DatabaseDto;
 import at.tuwien.mapper.DatabaseMapper;
-import at.tuwien.repository.elastic.DatabaseIdxRepository;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
-import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.event.EventListener;
-import org.springframework.core.env.Environment;
-import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
-import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -21,39 +17,26 @@ import java.util.stream.Collectors;
 @Component
 public class IndexConfig {
 
-    private final Environment environment;
     private final DatabaseMapper databaseMapper;
     private final DatabaseRepository databaseRepository;
     private final DatabaseIdxRepository databaseIdxRepository;
-    private final ElasticsearchOperations elasticsearchOperations;
-    private final ApplicationEventPublisher applicationEventPublisher;
 
-    public IndexConfig(Environment environment, DatabaseMapper databaseMapper, DatabaseRepository databaseRepository,
-                       DatabaseIdxRepository databaseIdxRepository, ElasticsearchOperations elasticsearchOperations,
-                       ApplicationEventPublisher applicationEventPublisher) {
-        this.environment = environment;
+    public IndexConfig(DatabaseMapper databaseMapper, DatabaseRepository databaseRepository,
+                       DatabaseIdxRepository databaseIdxRepository) {
         this.databaseMapper = databaseMapper;
         this.databaseRepository = databaseRepository;
         this.databaseIdxRepository = databaseIdxRepository;
-        this.elasticsearchOperations = elasticsearchOperations;
-        this.applicationEventPublisher = applicationEventPublisher;
     }
 
     @Transactional
     @EventListener(ApplicationReadyEvent.class)
     public void initIndex() {
-        log.debug("creating databaseindex");
-        final IndexCoordinates databaseIndex = IndexCoordinates.of("databaseindex");
-        if (!elasticsearchOperations.indexOps(databaseIndex).exists()) {
-            elasticsearchOperations.indexOps(databaseIndex).create();
-            elasticsearchOperations.indexOps(databaseIndex).createMapping(DatabaseDto.class);
-        }
         final List<DatabaseDto> databases = databaseRepository.findAll()
                 .stream()
                 .map(databaseMapper::databaseToDatabaseDto)
                 .collect(Collectors.toList());
-        log.debug("add {} databases to elastic search index", databases.size());
         databaseIdxRepository.saveAll(databases);
+        log.info("Added {} databases to open search index", databases.size());
     }
 
 }
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-database-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index 39566b1cc0c471f71212f9319e1497d0e3dcac66..f41d2aa3fae70608ac913bde9ae299d57ce5b0a4 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
similarity index 87%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
index 3cf7c7ad0072c6ddbd510696263cf6921dc6d1e0..fbcd74ed775bb84c3a05ca9a9f2ac52a662fa56d 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.DatabaseAccess;
+import at.tuwien.entities.database.DatabaseAccessKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -11,7 +12,7 @@ import java.util.Optional;
 import java.util.UUID;
 
 @Repository
-public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, Long> {
+public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> {
 
     void deleteByHdbidAndHuserid(Long databaseId, UUID userId);
 
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 97%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index 92e18ed6612ca7b5322e8694fec134a076aa1748..b70f0e0fb20ef5b6479805f7ed06e57c138aa907 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
similarity index 93%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
index 283dd62e8d4b75d573a318fd80d5be21abaf834a..e9a1ace9a73872c75e4fbb31af14fd698f67dcea 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.entities.identifier.IdentifierType;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 88%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index c033bd17dc63c7c0f8cb8b2354c689578d3eccf7..b1020fdcc532602d72cad5018b964edec4f25eea 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/LicenseRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java
similarity index 90%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/LicenseRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java
index 6ad152559aa62b08972fa6ed4488057ad0d9dae7..f59906b29c023a254b71c2df84778d4e02d837b2 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/LicenseRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/LicenseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.License;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
similarity index 88%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
index 99f75a4104e8daa1c61a3e7b67ee28aa4a3800ec..bd985254a5e2c6c5d42679754f5c164f975ff2ac 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Realm;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
similarity index 52%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
index 9f01ada5f7e7a2605c6dbaeef7e1b92afce9c05a..a1585a8f69babe0b0f5a5ff9a70cfaad52f2f075 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
@@ -1,10 +1,11 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.Table;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableRepository extends JpaRepository<Table, Long> {
+public interface TableRepository extends JpaRepository<Table, TableKey> {
 
 }
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 90%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 9eb0b5190252b7e1890deb7717fe9b2afc133d41..42d09c3e9eaecff5b277e10a724ebfb857a91c8b 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseIdxRepository.java b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java
similarity index 88%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseIdxRepository.java
rename to dbrepo-database-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java
index 709fa7be4d25e1b2ae4351fde7281d701fc8cd79..6125ff39ab41a7e341bb01a32bbc152415483032 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseIdxRepository.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/repository/sdb/DatabaseIdxRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.DatabaseDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
index a94df1399012e231287e07756353e2aa11f6be97..1a615abbe6105ba959f8002f42a4f4c7df6b41d2 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
@@ -8,7 +8,7 @@ import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DatabaseMapper;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.UserService;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index 76c29263d4b42461ac01274551f5650a5b6397ba..1796de02e8d04b2b25cd6ab4eba5c0d4427e0cd6 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -4,7 +4,7 @@ import at.tuwien.api.container.ContainerDto;
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.ContainerNotFoundException;
 import at.tuwien.gateway.ContainerServiceGateway;
-import at.tuwien.repository.jpa.ContainerRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
 import at.tuwien.service.ContainerService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
index 687a630b49e1359158528685a0cae8e691b2fc5d..fec841198727c1fd61f343a02141a58e0c5f112a 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
@@ -1,16 +1,13 @@
 package at.tuwien.service.impl;
 
 import at.tuwien.entities.identifier.Identifier;
-import at.tuwien.entities.identifier.IdentifierType;
-import at.tuwien.exception.IdentifierNotFoundException;
-import at.tuwien.repository.jpa.IdentifierRepository;
+import at.tuwien.repository.mdb.IdentifierRepository;
 import at.tuwien.service.IdentifierService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-import java.util.Optional;
 
 @Log4j2
 @Service
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java
index 4608207d9291de57f1bfbcbf2db2fd7f191f5dbf..22a7634c3c29728ecb2ddf4f6b0c88869b4bf405 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/LicenseServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.License;
 import at.tuwien.exception.LicenseNotFoundException;
-import at.tuwien.repository.jpa.LicenseRepository;
+import at.tuwien.repository.mdb.LicenseRepository;
 import at.tuwien.service.LicenseService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.stereotype.Service;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java
index 3723ccaae88b0ad247a4be97e018962c48ae918e..0725475a576d5db1a134aef6c6cbcde40ac9cdd1 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/MariaDbServiceImpl.java
@@ -9,8 +9,8 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DatabaseMapper;
-import at.tuwien.repository.elastic.DatabaseIdxRepository;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.sdb.DatabaseIdxRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import at.tuwien.service.ContainerService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.UserService;
@@ -108,11 +108,10 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
         }
         /* save in metadata database */
         databaseRepository.deleteById(databaseId);
-        log.info("Deleted database with id {}", databaseId);
-        log.trace("deleted database {}", database);
+        log.info("Deleted database with id {} in metadata database", databaseId);
         // delete in database_index - elastic search
         databaseIdxRepository.deleteById(databaseId);
-        log.info("Deleted database in elastic search with id {}", databaseId);
+        log.info("Deleted database with id {} in open search database", databaseId);
     }
 
     @Override
@@ -155,10 +154,11 @@ public class MariaDbServiceImpl extends HibernateConnector implements DatabaseSe
         log.info("Created user {} on database with owner access", user.getUsername());
         /* save in metadata database */
         final Database entity = databaseRepository.save(database);
-        log.info("Created database with id {}", entity.getId());
+        log.info("Created database with id {} in metadata database", entity.getId());
         /* save in database_index - elastic search */
-        databaseIdxRepository.save(databaseMapper.databaseToDatabaseDto(entity));
-        log.info("Saved database in elastic search with id {}", entity.getId());
+        final DatabaseDto databaseDto = databaseMapper.databaseToDatabaseDto(entity);
+        databaseIdxRepository.save(databaseDto);
+        log.info("Created database with id {} in open search database", entity.getId());
         return entity;
     }
 
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
index 70f2cabd3b49a73f38b64b618bfda3261bc6eecf..ec2bbaf512cf2a83dd0d241ea0f7c9d92be90957 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/RabbitMqServiceImpl.java
@@ -9,7 +9,7 @@ import at.tuwien.exception.BrokerVirtualHostCreationException;
 import at.tuwien.exception.BrokerVirtualHostGrantException;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.mapper.AmqpMapper;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import at.tuwien.service.MessageQueueService;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 003f54c319a01c901076553690c5d319aeab2953..2626da3c2cdb4c45b13cc9ea93ca9f4b472fd7e3 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-database-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,13 +2,12 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
diff --git a/dbrepo-identifier-service/pom.xml b/dbrepo-identifier-service/pom.xml
index 07fe813de20df93f19cc15894d164db2c717507d..31c7b376851c0fc7fa113c67f8399f078bf2c2a5 100644
--- a/dbrepo-identifier-service/pom.xml
+++ b/dbrepo-identifier-service/pom.xml
@@ -35,6 +35,7 @@
         <super-csv.version>2.4.0</super-csv.version>
         <jsql.version>4.6</jsql.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -98,8 +99,14 @@
             <version>${mariadb.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Docker -->
         <dependency>
@@ -127,6 +134,12 @@
             <version>${springdoc-openapi.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
@@ -214,6 +227,7 @@
                         <exclude>at/tuwien/exception/**/*</exclude>
                         <exclude>at/tuwien/utils/**/*</exclude>
                         <exclude>at/tuwien/handlers/**/*</exclude>
+                        <exclude>at/tuwien/auth/**/*</exclude>
                         <exclude>**/DbrepoIdentifierServiceApplication.class</exclude>
                     </excludes>
                 </configuration>
diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java
index 2104df15d67bac70158e33d6ca942f1e689d35c5..7ec621e738fc31f8fc85bc201ebd6d79ed8039b7 100644
--- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java
+++ b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -10,11 +11,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 @EnableJpaAuditing
-@SpringBootApplication
 @EnableTransactionManagement
-@EntityScan(basePackages = "at.tuwien.entities")
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EntityScan(basePackages = {"at.tuwien.entities"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoIdentifierServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml
index 6800891595f1666ccdf046f764174ac52ccf7ca6..ee738133cafd2681ce0ad6f879e1edc33dae9315 100644
--- a/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-identifier-service/rest-service/src/main/resources/application-local.yml
@@ -27,10 +27,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 server:
   port: 9096
diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml
index 0ec8f69c7b680fb1105deb024141aa139aff4333..2ebfae7cd8096fcffc33474e57c57a59459d7a9f 100644
--- a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
@@ -27,10 +29,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: elastic
-    uris: http://search-db:9200
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 server:
   port: 9096
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
index 3677c7f0451b17bc696a779ff759066bfd57832d..2b4f129bfb5141a31efc6e3e583dd9cd54eeb88e 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
@@ -1,7 +1,8 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -22,11 +23,14 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @SpringBootTest
 public class ActuatorComponentTest extends BaseUnitTest {
 
-    @Autowired
-    private MockMvc mockMvc;
+    @MockBean
+    private IndexConfig indexConfig;
 
     @MockBean
-    private IndexInitializer indexConfig;
+    private IdentifierIdxRepository identifierIdxRepository;
+
+    @Autowired
+    private MockMvc mockMvc;
 
     @Test
     public void actuatorInfo_succeeds() throws Exception {
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java
index a2ea25e54284cb6df30fa4558a3724832bf7fc9e..406ca2e65b4d36ffdea6c9ede5e1b400ce60ae7e 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointIntegrationTest.java
@@ -3,11 +3,12 @@ package at.tuwien.endpoint;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.identifier.IdentifierDto;
 import at.tuwien.api.identifier.IdentifierTypeDto;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.IdentifierEndpoint;
 import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -34,11 +35,14 @@ import static org.junit.jupiter.api.Assertions.*;
 public class IdentifierEndpointIntegrationTest extends BaseUnitTest {
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexInitializer;
 
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
+
     @Autowired
     private IdentifierRepository identifierRepository;
 
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java
index 1be9690cb0e989e974a8f81494a98ccd68acf202..c98c045e69b9d2e6be6f8a7c855659b7674b039f 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/IdentifierEndpointUnitTest.java
@@ -5,7 +5,7 @@ import at.tuwien.api.identifier.IdentifierCreateDto;
 import at.tuwien.api.identifier.IdentifierDto;
 import at.tuwien.api.identifier.IdentifierTypeDto;
 import at.tuwien.config.EndpointConfig;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.IdentifierEndpoint;
 import at.tuwien.endpoints.PersistenceEndpoint;
@@ -16,7 +16,8 @@ import at.tuwien.entities.identifier.RelatedIdentifier;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.QueryServiceGateway;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.IdentifierService;
 import org.apache.commons.io.FileUtils;
@@ -29,7 +30,6 @@ import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.access.AccessDeniedException;
-import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
 import org.springframework.security.test.context.support.WithAnonymousUser;
 import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -54,7 +54,7 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest {
     private ReadyConfig readyConfig;
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexConfig;
 
     @MockBean
     private IdentifierService identifierService;
@@ -80,6 +80,9 @@ public class IdentifierEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private QueryServiceGateway queryServiceGateway;
 
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
+
     @Autowired
     private IdentifierEndpoint identifierEndpoint;
 
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java
index d3c64bd929d72368c2917ed25f952fce282391b7..2f74995d16a86cc042eb909ae75360338adfb287 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/PersistenceEndpointUnitTest.java
@@ -5,12 +5,13 @@ import at.tuwien.api.identifier.BibliographyTypeDto;
 import at.tuwien.api.identifier.CreatorDto;
 import at.tuwien.api.identifier.IdentifierDto;
 import at.tuwien.api.identifier.IdentifierUpdateDto;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.PersistenceEndpoint;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.IdentifierService;
 import at.tuwien.service.UserService;
@@ -54,7 +55,10 @@ public class PersistenceEndpointUnitTest extends BaseUnitTest {
     private ReadyConfig readyConfig;
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
 
     @MockBean
     private AccessService accessService;
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
index 0caa396455da3088708d66147dfe1afd35ae981a..6ef1503d94a374da4238fc8f909502c3c83c32c8 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
@@ -1,7 +1,8 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -26,7 +27,10 @@ public class SwaggerComponentTest extends BaseUnitTest {
     private MockMvc mockMvc;
 
     @MockBean
-    private IndexInitializer indexConfig;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
 
     @Test
     public void swaggerUi_succeeds() throws Exception {
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
index 1a68af0041864473bcb23c43e0679a2c90d21f2d..055cc56e07a32c23bd95a6928c56da046d646dbe 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
@@ -2,11 +2,12 @@ package at.tuwien.gateway;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.query.QueryDto;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.QueryNotFoundException;
 import at.tuwien.exception.RemoteUnavailableException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import com.google.common.io.Files;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -36,11 +37,14 @@ import static org.mockito.Mockito.*;
 public class QueryServiceGatewayUnitTest extends BaseUnitTest {
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexConfig;
 
     @MockBean
     private ReadyConfig readyConfig;
 
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
+
     @MockBean
     @Qualifier("restTemplate")
     private RestTemplate restTemplate;
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java
index 1aad8f0b61650640eaeb10bb52234b2c19d6411b..beea45933df3de4a2bab46639e7cfa5135e95df4 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DataCiteIdentifierServiceUnitTest.java
@@ -8,10 +8,11 @@ import at.tuwien.api.identifier.IdentifierCreateDto;
 import at.tuwien.api.identifier.IdentifierUpdateDto;
 import at.tuwien.config.DataCiteConfig;
 import at.tuwien.config.EndpointConfig;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import at.tuwien.service.impl.IdentifierServiceImpl;
 import org.apache.http.auth.BasicUserPrincipal;
 import org.junit.jupiter.api.BeforeEach;
@@ -29,7 +30,6 @@ import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestClientException;
@@ -47,7 +47,7 @@ import static org.mockito.Mockito.when;
 public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest {
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexConfig;
 
     @MockBean(answer = Answers.RETURNS_MOCKS)
     private DataCiteConfig dataCiteConfig;
@@ -55,6 +55,9 @@ public class DataCiteIdentifierServiceUnitTest extends BaseUnitTest {
     @MockBean(answer = Answers.RETURNS_MOCKS)
     private EndpointConfig endpointConfig;
 
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
+
     @Autowired
     private ImageRepository imageRepository;
 
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9570960ead1b98cc0fc965e2545a7de0112e4a50
--- /dev/null
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java
@@ -0,0 +1,81 @@
+package at.tuwien.service;
+
+import at.tuwien.BaseUnitTest;
+import at.tuwien.config.IndexConfig;
+import at.tuwien.entities.database.Database;
+import at.tuwien.entities.user.User;
+import at.tuwien.exception.DatabaseNotFoundException;
+import at.tuwien.exception.UserNotFoundException;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
+import at.tuwien.service.UserService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import java.util.Optional;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(SpringExtension.class)
+@SpringBootTest
+public class DatabaseServiceIntegrationTest extends BaseUnitTest {
+
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
+
+    @Autowired
+    private DatabaseService databaseService;
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private RealmRepository realmRepository;
+
+    @Autowired
+    private ContainerRepository containerRepository;
+
+    @Autowired
+    private DatabaseRepository databaseRepository;
+
+    @Autowired
+    private ImageRepository imageRepository;
+
+    @BeforeEach
+    public void beforeEach() {
+        userRepository.save(USER_1);
+        realmRepository.save(REALM_DBREPO);
+        imageRepository.save(IMAGE_1);
+        containerRepository.save(CONTAINER_1);
+        databaseRepository.save(DATABASE_1);
+    }
+
+    @Test
+    public void find_succeeds() throws DatabaseNotFoundException {
+
+        /* test */
+        final Database response = databaseService.find(DATABASE_1_ID);
+        assertEquals(DATABASE_1_ID, response.getId());
+    }
+
+    @Test
+    public void find_fails() {
+
+        /* test */
+        assertThrows(DatabaseNotFoundException.class, () -> {
+            databaseService.find(9999L);
+        });
+    }
+
+
+}
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
index 27bdb8c69b75578f56b203ec6f5fc9b0a570b136..96de2e004f9f9d8810f2fc2dcc6154bdcd7a5a24 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
@@ -3,13 +3,13 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.query.QueryDto;
 import at.tuwien.api.identifier.IdentifierDto;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.entities.identifier.RelatedIdentifier;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.QueryServiceGateway;
-import at.tuwien.repository.elastic.IdentifierIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
+import at.tuwien.repository.mdb.*;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -39,7 +39,7 @@ import static org.mockito.Mockito.when;
 public class IdentifierServiceIntegrationTest extends BaseUnitTest {
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexInitializer;
 
     @MockBean
     private IdentifierIdxRepository identifierIdxRepository;
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java
index d7e8b28963278b32426509a2bffbe4816018a839..cfd4cb71dc193c9bdfc70e96b19f510983d0fd04 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceUnitTest.java
@@ -3,13 +3,12 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.database.query.QueryDto;
 import at.tuwien.api.identifier.IdentifierDto;
-import at.tuwien.api.identifier.IdentifierUpdateDto;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.entities.identifier.IdentifierType;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.IdentifierIdxRepository;
-import at.tuwien.repository.jpa.IdentifierRepository;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
+import at.tuwien.repository.mdb.IdentifierRepository;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,7 +38,7 @@ public class IdentifierServiceUnitTest extends BaseUnitTest {
     private IdentifierRepository identifierRepository;
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexInitializer;
 
     @MockBean
     private IdentifierIdxRepository identifierIdxRepository;
diff --git a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
index da772b10e1d1e3ba7830eacddf2ef2e352031b55..aeaaa30d623396d2129f313bb9d00255bb2ede02 100644
--- a/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
+++ b/dbrepo-identifier-service/rest-service/src/test/java/at/tuwien/service/UserServiceUnitTest.java
@@ -1,10 +1,11 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.config.IndexInitializer;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,7 +24,10 @@ import static org.mockito.Mockito.when;
 public class UserServiceUnitTest extends BaseUnitTest {
 
     @MockBean
-    private IndexInitializer indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private IdentifierIdxRepository identifierIdxRepository;
 
     @MockBean
     private UserRepository userRepository;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
deleted file mode 100644
index 58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65..0000000000000000000000000000000000000000
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package at.tuwien.config;
-
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.json.jackson.JacksonJsonpMapper;
-import co.elastic.clients.transport.ElasticsearchTransport;
-import co.elastic.clients.transport.rest_client.RestClientTransport;
-import lombok.extern.log4j.Log4j2;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.elasticsearch.client.RestClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Log4j2
-@Configuration
-public class ElasticsearchConfig {
-
-    @Value("${spring.elasticsearch.uris}")
-    private String elasticEndpoint;
-
-    @Value("${spring.elasticsearch.username}")
-    private String elasticUsername;
-
-    @Value("${spring.elasticsearch.password}")
-    private String elasticPassword;
-
-    @Bean
-    public ElasticsearchClient elasticsearchClient() {
-        log.debug("elastic endpoint={}", elasticEndpoint);
-        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword));
-        final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint))
-                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
-                        .setDefaultCredentialsProvider(credentialsProvider))
-                .build();
-        ElasticsearchTransport transport = new RestClientTransport(
-                restClient, new JacksonJsonpMapper());
-        return new ElasticsearchClient(transport);
-    }
-
-}
\ No newline at end of file
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexConfig.java
similarity index 58%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexConfig.java
index 0592364d2de1925f1f1298e635c3ddc58d0e0e06..e3688abbc1ced999ad425307ccdcb20cc254d27f 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexInitializer.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/IndexConfig.java
@@ -2,8 +2,8 @@ package at.tuwien.config;
 
 import at.tuwien.api.identifier.IdentifierDto;
 import at.tuwien.mapper.IdentifierMapper;
-import at.tuwien.repository.elastic.IdentifierIdxRepository;
-import at.tuwien.repository.jpa.IdentifierRepository;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
+import at.tuwien.repository.mdb.IdentifierRepository;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
@@ -18,37 +18,28 @@ import java.util.stream.Collectors;
 
 @Component
 @Log4j2
-public class IndexInitializer {
+public class IndexConfig {
 
     private final IdentifierMapper identifierMapper;
     private final IdentifierRepository identifierRepository;
     private final IdentifierIdxRepository identifierIdxRepository;
-    private final ElasticsearchOperations elasticsearchOperations;
 
     @Autowired
-    public IndexInitializer(IdentifierMapper identifierMapper, IdentifierRepository identifierRepository,
-                            IdentifierIdxRepository identifierIdxRepository,
-                            ElasticsearchOperations elasticsearchOperations) {
+    public IndexConfig(IdentifierMapper identifierMapper, IdentifierRepository identifierRepository,
+                       IdentifierIdxRepository identifierIdxRepository) {
         this.identifierMapper = identifierMapper;
         this.identifierRepository = identifierRepository;
         this.identifierIdxRepository = identifierIdxRepository;
-        this.elasticsearchOperations = elasticsearchOperations;
     }
 
     @Transactional
     @EventListener(ApplicationReadyEvent.class)
     public void initIndex() {
-        log.debug("creating identifierindex");
-        final IndexCoordinates identifierIndex = IndexCoordinates.of("identifierindex");
-        if (!elasticsearchOperations.indexOps(identifierIndex).exists()) {
-            elasticsearchOperations.indexOps(identifierIndex).create();
-            elasticsearchOperations.indexOps(identifierIndex).createMapping(IdentifierDto.class);
-        }
         final List<IdentifierDto> identifiers = identifierRepository.findAll()
                 .stream()
                 .map(identifierMapper::identifierToIdentifierDto)
                 .collect(Collectors.toList());
-        log.debug("add {} identifiers to elastic search index", identifiers.size());
         identifierIdxRepository.saveAll(identifiers);
+        log.info("Added {} identifiers to open search index", identifiers.size());
     }
 }
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
deleted file mode 100644
index 122095a168705beba38dc0c52cba481c1a64a649..0000000000000000000000000000000000000000
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ /dev/null
@@ -1,15 +0,0 @@
-
-package at.tuwien.repository.jpa;
-
-import at.tuwien.entities.user.Realm;
-import at.tuwien.entities.user.User;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-import java.util.UUID;
-
-@Repository
-public interface RealmRepository extends JpaRepository<Realm, UUID> {
-
-}
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/AccessRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/AccessRepository.java
similarity index 76%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/AccessRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/AccessRepository.java
index 2795450ea714602c41b8be03d62cbfc1853aa967..856fe81cead180bb0b934bc090dcf33d344e17b2 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/AccessRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/AccessRepository.java
@@ -1,7 +1,8 @@
 
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.DatabaseAccess;
+import at.tuwien.entities.database.DatabaseAccessKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -9,7 +10,7 @@ import java.util.Optional;
 import java.util.UUID;
 
 @Repository
-public interface AccessRepository extends JpaRepository<DatabaseAccess, Long> {
+public interface AccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> {
 
     Optional<DatabaseAccess> findByHdbidAndHuserid(Long databaseId, UUID userId);
 
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index 39566b1cc0c471f71212f9319e1497d0e3dcac66..f41d2aa3fae70608ac913bde9ae299d57ce5b0a4 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/CreatorRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java
similarity index 70%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/CreatorRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java
index 2470972bd469c4bf3ac00ced1546bea34744959d..4513becc2270924d5cafb83a74e054ad121788ad 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/CreatorRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/CreatorRepository.java
@@ -1,10 +1,11 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.Creator;
+import at.tuwien.entities.identifier.CreatorKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface CreatorRepository extends JpaRepository<Creator, Long> {
+public interface CreatorRepository extends JpaRepository<Creator, CreatorKey> {
 
 }
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 95%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index 29ee345f1a5c3b0c84129a3f16cf08644abe9031..dd31029441061583637573fdb016bfd81a111a7f 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
similarity index 95%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
index fa193cc6c25c1d48ae9b9336020cd97a5c6e0ece..856ba9418f22b22745cbf4d836dafd10aaf357b5 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.entities.identifier.IdentifierType;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 88%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index 247ce97770d636831aef83e8cc1a471ed67019a9..046fd51c3edd4a04becd27a2017cb38c88278ac7 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..439a1f372ef3df37a8f824af8296e7a7a1361315
--- /dev/null
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -0,0 +1,13 @@
+
+package at.tuwien.repository.mdb;
+
+import at.tuwien.entities.user.Realm;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.UUID;
+
+@Repository
+public interface RealmRepository extends JpaRepository<Realm, UUID> {
+
+}
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RelatedIdentifierRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RelatedIdentifierRepository.java
similarity index 91%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RelatedIdentifierRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RelatedIdentifierRepository.java
index 4e735007ab69f5ca5b6c9e1e4fa0007a4cbeb3a3..a1334eb5bd9ac5c739bfb6a5f6b222eb886296bb 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/RelatedIdentifierRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/RelatedIdentifierRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.RelatedIdentifier;
 import at.tuwien.entities.identifier.RelatedIdentifierKey;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
similarity index 74%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
index 548737b0b92f9b5d9fceb1808b2f1b5894356135..6117a02933659fb8fdeca55bba538ea4aad02cd9 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
@@ -1,7 +1,8 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.table.Table;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -9,7 +10,7 @@ import java.util.List;
 import java.util.Optional;
 
 @Repository
-public interface TableRepository extends JpaRepository<Table, Long> {
+public interface TableRepository extends JpaRepository<Table, TableKey> {
 
     List<Table> findByDatabase(Database database);
 
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 90%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 01b143f6f813cb5c34cd94a413010f2677d43685..499954150fa41d366275e24e037b870e412b7a75 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,5 +1,5 @@
 
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/elastic/IdentifierIdxRepository.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java
similarity index 88%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/elastic/IdentifierIdxRepository.java
rename to dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java
index 13f4dc6316fad7f371ce4fce95d17b09de534ee0..45e42d1515bbc6f94001363ce647a5d8472c9f6c 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/elastic/IdentifierIdxRepository.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.identifier.IdentifierDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
index f23467c3af5f7302b60a32fae0d300a668af8114..c086a2990c4f405ebc7d45a5cbbd47b8a3a4432b 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.AccessDeniedException;
-import at.tuwien.repository.jpa.AccessRepository;
+import at.tuwien.repository.mdb.AccessRepository;
 import at.tuwien.service.AccessService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java
index b83724e483da03d3510e050465328eb1316e78fc..458419a794ee5c9a3adf06d6907326995d1537e1 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DataCiteIdentifierServiceImpl.java
@@ -12,7 +12,7 @@ import at.tuwien.config.EndpointConfig;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DataCiteMapper;
-import at.tuwien.repository.jpa.IdentifierRepository;
+import at.tuwien.repository.mdb.IdentifierRepository;
 import at.tuwien.service.IdentifierService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.web.client.RestTemplateBuilder;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
index c79c1bca0271d880cc25492d96ee41cb3dc15905..3f853c02aa6e12752e7faa883647cb1674c982a1 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.DatabaseNotFoundException;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import at.tuwien.service.DatabaseService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
index 4a3aa4437bc9d982f9dd3754b5599057062ad6e5..8be744283483a10a2950098a130073f26cc5654c 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
@@ -12,9 +12,9 @@ import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.QueryServiceGateway;
 import at.tuwien.mapper.IdentifierMapper;
-import at.tuwien.repository.elastic.IdentifierIdxRepository;
-import at.tuwien.repository.jpa.IdentifierRepository;
-import at.tuwien.repository.jpa.RelatedIdentifierRepository;
+import at.tuwien.repository.sdb.IdentifierIdxRepository;
+import at.tuwien.repository.mdb.IdentifierRepository;
+import at.tuwien.repository.mdb.RelatedIdentifierRepository;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.IdentifierService;
 import at.tuwien.service.UserService;
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 2c7df8b36c10c7ce06a26808f63422a0ccc30c93..47f1ac286b3fa39407359baf5cdc58a4f8d700f5 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-identifier-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
index 5715b7cd2926cb1ddf5407aa63501c3ef91dd65b..0717ed8c486efa75b443a0a8c0f68b0937a773f8 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
@@ -10,10 +10,12 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+
 import java.time.Instant;
 import java.util.List;
 
@@ -24,7 +26,7 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "databaseindex", createIndex = false)
+@Document(indexName = "database")
 public class DatabaseDto {
 
     @NotNull
@@ -35,6 +37,7 @@ public class DatabaseDto {
     private String name;
 
     @NotBlank
+    @Field(name = "exchange_name")
     @JsonProperty("exchange_name")
     @Schema(example = "dbrepo/air_quality")
     private String exchangeName;
@@ -42,6 +45,7 @@ public class DatabaseDto {
     private IdentifierDto identifier;
 
     @NotBlank
+    @Field(name = "internal_name")
     @JsonProperty("internal_name")
     @Schema(example = "weather_australia")
     private String internalName;
@@ -53,6 +57,7 @@ public class DatabaseDto {
 
     private List<ViewBriefDto> views;
 
+    @Field(name = "is_public")
     @JsonProperty("is_public")
     @Schema(example = "true")
     private Boolean isPublic;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java
index 7a5f80d2bca4f89a4807af09d7c5941ec5b2d264..031aaadd0a53e24de18332f765c5f34e2a11276a 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java
@@ -7,10 +7,12 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+
 import java.time.Instant;
 import java.util.UUID;
 
@@ -21,13 +23,15 @@ import java.util.UUID;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "viewindex", createIndex = false)
+@Document(indexName = "view")
 public class ViewDto {
 
     @NotNull
     private Long id;
 
     @NotNull
+    @Field(name = "database_id")
+    @JsonProperty("database_id")
     private Long vdbid;
 
     @NotNull
@@ -39,13 +43,16 @@ public class ViewDto {
     private String name;
 
     @NotBlank
+    @Field(name = "air_quality")
     @Schema(example = "air_quality")
     private String internalName;
 
+    @Field(name = "is_public")
     @JsonProperty("is_public")
     @Schema(example = "true")
     private Boolean isPublic;
 
+    @Field(name = "initial_view")
     @JsonProperty("initial_view")
     @Schema(example = "true", description = "True if it is the default view for the database")
     private Boolean isInitialView;
@@ -65,6 +72,7 @@ public class ViewDto {
     @NotNull
     private UserDto creator;
 
+    @Field(name = "last_modified")
     @JsonProperty("last_modified")
     @Schema(example = "2020-08-04 11:12:00")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
index cf7d14f9406c363e3791ad26a8336e506a5be034..8df51261bd297a7e113fc6f53f05b1ed4d4b867a 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
@@ -4,15 +4,16 @@ import at.tuwien.api.database.table.columns.ColumnDto;
 import at.tuwien.api.database.table.constraints.ConstraintsDto;
 import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+
 import java.time.Instant;
 import java.util.List;
 
@@ -23,13 +24,17 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "tableindex", createIndex = false)
+@Document(indexName = "table")
 public class TableDto {
 
-    @JsonIgnore
+    @NotNull
+    @Field(name = "container_id")
+    @JsonProperty("container_id")
     private Long containerId;
 
-    @JsonIgnore
+    @NotNull
+    @Field(name = "database_id")
+    @JsonProperty("database_id")
     private Long databaseId;
 
     @NotNull
@@ -40,6 +45,7 @@ public class TableDto {
     private String name;
 
     @NotBlank(message = "internalName is required")
+    @Field(name = "internal_name")
     @JsonProperty("internal_name")
     @Schema(example = "air_quality")
     private String internalName;
@@ -51,11 +57,13 @@ public class TableDto {
     private UserBriefDto owner;
 
     @NotBlank(message = "queueName is required")
+    @Field(name = "queue_name")
     @JsonProperty("queue_name")
     @Schema(example = "dbrepo/air_quality/air_quality")
     private String queueName;
 
     @NotBlank(message = "routingKey is required")
+    @Field(name = "routing_key")
     @JsonProperty("routing_key")
     @Schema(example = "dbrepo/air_quality/air_quality/1")
     private String routingKey;
@@ -65,6 +73,7 @@ public class TableDto {
     private String description;
 
     @NotNull(message = "isPublic is required")
+    @Field(name = "is_public")
     @JsonProperty("is_public")
     @Schema(example = "true")
     private Boolean isPublic;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..010bc68af285bb9fadd741355687e1a9218d1448
--- /dev/null
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java
@@ -0,0 +1,24 @@
+package at.tuwien.api.database.table;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Jacksonized
+@ToString
+public class TableKeyDto {
+
+    @NotNull
+    private Long containerId;
+
+    @NotNull
+    private Long databaseId;
+
+    @NotNull
+    private Long id;
+}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
index 612f15d86d2408119a5adf8d095f86131918cbf3..6f3b30b04d5c25c82955d60a6a81faee1aaa2b86 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
@@ -3,16 +3,16 @@ package at.tuwien.api.database.table.columns;
 import at.tuwien.api.container.image.ImageDateDto;
 import at.tuwien.api.database.table.columns.concepts.ConceptDto;
 import at.tuwien.api.database.table.columns.concepts.UnitDto;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
 
 @Getter
 @Setter
@@ -21,16 +21,22 @@ import jakarta.validation.constraints.NotNull;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "columnindex", createIndex = false)
+@Document(indexName = "column")
 public class ColumnDto {
 
-    @JsonIgnore
+    @NotNull
+    @Field(name = "container_id")
+    @JsonProperty("container_id")
     private Long containerId;
 
-    @JsonIgnore
+    @NotNull
+    @Field(name = "database_id")
+    @JsonProperty("database_id")
     private Long databaseId;
 
-    @JsonIgnore
+    @NotNull
+    @Field(name = "table_id")
+    @JsonProperty("table_id")
     private Long tableId;
 
     @NotNull
@@ -41,28 +47,34 @@ public class ColumnDto {
     private String name;
 
     @NotBlank
+    @Field(name = "internal_name")
     @JsonProperty("internal_name")
     @Schema(example = "mdb_date")
     private String internalName;
 
+    @Field(name = "date_format")
     @JsonProperty("date_format")
     @org.springframework.data.annotation.Transient
     private ImageDateDto dateFormat;
 
     @NotNull
+    @Field(name = "auto_generated")
     @JsonProperty("auto_generated")
     @Schema(example = "false")
     private Boolean autoGenerated;
 
     @NotNull
+    @Field(name = "is_primary_key")
     @JsonProperty("is_primary_key")
     @Schema(example = "true")
     private Boolean isPrimaryKey;
 
+    @Field(name = "index_length")
     @JsonProperty("index_length")
     private Integer indexLength;
 
     @NotNull
+    @Field(name = "column_type")
     @JsonProperty("column_type")
     @Schema(example = "string")
     private ColumnTypeDto columnType;
@@ -75,15 +87,18 @@ public class ColumnDto {
     private UnitDto unit;
 
     @NotNull
+    @Field(name = "is_public")
     @JsonProperty("is_public")
     @Schema(example = "true")
     private Boolean isPublic;
 
     @NotNull
+    @Field(name = "is_null_allowed")
     @JsonProperty("is_null_allowed")
     @Schema(example = "false")
     private Boolean isNullAllowed;
 
+    @Field(name = "enum_values")
     @JsonProperty("enum_values")
     @Parameter(description = "enum values, only considered when type = ENUM")
     private String[] enumValues;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..28dc203f0388225ceb29e849fc2998a8a681c58c
--- /dev/null
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java
@@ -0,0 +1,27 @@
+package at.tuwien.api.database.table.columns;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Jacksonized
+@ToString
+public class ColumnKeyDto {
+
+    @NotNull
+    private Long containerId;
+
+    @NotNull
+    private Long databaseId;
+
+    @NotNull
+    private Long tableId;
+
+    @NotNull
+    private Long id;
+}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java
index 590cd825e769d0b4ecda085bcbb9bcb51e7c2875..32d98c0a90b0b24db1621c27790dbb2d79965a2e 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/ConceptDto.java
@@ -9,6 +9,8 @@ import lombok.*;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.extern.jackson.Jacksonized;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
 
 import java.time.Instant;
 import java.util.List;
@@ -20,6 +22,7 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
+@Document(indexName = "concept")
 public class ConceptDto {
 
     @NotBlank
@@ -30,9 +33,11 @@ public class ConceptDto {
     private String description;
 
     @NotNull
+    @Field(enabled = false)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
     @NotNull
+    @Field(enabled = false)
     private List<ColumnBriefDto> columns;
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java
index 9e0fd693604556fa661ff0b8ad792dd2382f4625..58316c6123a8aed638d56676cf7c7b1dd10db6dc 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/concepts/UnitDto.java
@@ -7,6 +7,8 @@ import lombok.*;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.extern.jackson.Jacksonized;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
 
 import java.time.Instant;
 import java.util.List;
@@ -18,6 +20,7 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
+@Document(indexName = "unit")
 public class UnitDto {
 
     @NotBlank
@@ -28,9 +31,11 @@ public class UnitDto {
     private String description;
 
     @NotNull
+    @Field(enabled = false)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", timezone = "UTC")
     private Instant created;
 
     @NotNull
+    @Field(enabled = false)
     private List<ColumnBriefDto> columns;
 }
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
index 592c7cfc8cd1769805a99000bb713677726bc03d..632ee66fc8429a6d4d4f16e9e2a2a15c060993f3 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
@@ -9,10 +9,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+
 import java.time.Instant;
 import java.util.List;
 
@@ -23,7 +24,7 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "identifierindex", createIndex = false)
+@Document(indexName = "identifier")
 public class IdentifierDto {
 
     private Long id;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
index 6197dd0697c92d29f6f0f527d69cd4375012a999..2a8cfd4fe4e164a9f11a2d5b2e69c9073c0e36dc 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
@@ -7,6 +7,8 @@ import lombok.*;
 
 import jakarta.validation.constraints.NotNull;
 import lombok.extern.jackson.Jacksonized;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
 
 import java.util.List;
 import java.util.UUID;
@@ -18,6 +20,7 @@ import java.util.UUID;
 @AllArgsConstructor
 @Jacksonized
 @ToString
+@Document(indexName = "user")
 public class UserDto {
 
     @NotNull
@@ -64,6 +67,7 @@ public class UserDto {
     private String email;
 
     @NotNull
+    @Field(name = "email_verified")
     @JsonProperty("email_verified")
     @Schema(example = "true")
     @org.springframework.data.annotation.Transient
diff --git a/dbrepo-metadata-db/pom.xml b/dbrepo-metadata-db/pom.xml
index cccf8f2178cd6466e0b04f757816004303a4c40a..0fb24fd6ea1b841a9337014f643f43a876247226 100644
--- a/dbrepo-metadata-db/pom.xml
+++ b/dbrepo-metadata-db/pom.xml
@@ -32,6 +32,7 @@
         <jackson-datatype.version>2.15.0</jackson-datatype.version>
         <commons.version>2.11.0</commons.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -47,10 +48,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
-        <!-- DataSource -->
         <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Mapping -->
         <dependency>
diff --git a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
index 22e0c0c39ac2e5830512adf7099c58c6307a2e1d..84e89a26418be53fa0a71e47ac3db987f7af2b90 100644
--- a/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
+++ b/dbrepo-metadata-db/test/src/main/java/at/tuwien/test/BaseTest.java
@@ -17,9 +17,7 @@ import at.tuwien.api.database.table.TableCreateDto;
 import at.tuwien.api.database.table.TableCsvDto;
 import at.tuwien.api.database.table.columns.ColumnCreateDto;
 import at.tuwien.api.database.table.columns.ColumnTypeDto;
-import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto;
-import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto;
-import at.tuwien.api.database.table.columns.concepts.UnitSaveDto;
+import at.tuwien.api.database.table.columns.concepts.*;
 import at.tuwien.api.database.table.constraints.ConstraintsCreateDto;
 import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyCreateDto;
 import at.tuwien.api.identifier.*;
@@ -900,8 +898,8 @@ public abstract class BaseTest {
             .build();
 
     public final static Long IMAGE_ELASTIC_ID = 3L;
-    public final static String IMAGE_ELASTIC_REPOSITORY = "elasticsearch";
-    public final static String IMAGE_ELASTIC_TAG = "8.7.1";
+    public final static String IMAGE_ELASTIC_REPOSITORY = "opensearchproject/opensearch";
+    public final static String IMAGE_ELASTIC_TAG = "2";
 
     public final static ContainerImage IMAGE_ELASTIC = ContainerImage.builder()
             .id(IMAGE_ELASTIC_ID)
@@ -1117,8 +1115,8 @@ public abstract class BaseTest {
     public final static String CONTAINER_ELASTIC_IP = "172.31.0.3";
     public final static String CONTAINER_ELASTIC_HASH = "deadbeef";
     public final static Instant CONTAINER_ELASTIC_CREATED = Instant.ofEpochSecond(1677399721) /* 2023-02-26 08:22:01 (UTC) */;
-    public final static String[] CONTAINER_ELASTIC_ENV = new String[]{"discovery.type=single-node", "ES_JAVA_OPTS=-Xms2g -Xmx2g",
-            "logger.level=WARN", "bootstrap.memory_lock=true", "xpack.security.enabled=true", "ELASTIC_PASSWORD=elastic"};
+    public final static String[] CONTAINER_ELASTIC_ENV = new String[]{"discovery.type=single-node", "ES_JAVA_OPTS=-Xms4g -Xmx4g",
+            "logger.level=WARN", "bootstrap.memory_lock=true", "plugins.security.disabled=true"};
 
     public final static Container CONTAINER_ELASTIC = Container.builder()
             .id(CONTAINER_ELASTIC_ID)
@@ -1917,6 +1915,12 @@ public abstract class BaseTest {
             .description(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION)
             .build();
 
+    public final static ConceptDto COLUMN_CONCEPT_TEMPERATURE_DTO = ConceptDto.builder()
+            .uri(COLUMN_CONCEPT_TEMPERATURE_URI)
+            .name(COLUMN_CONCEPT_TEMPERATURE_NAME)
+            .description(COLUMN_CONCEPT_TEMPERATURE_DESCRIPTION)
+            .build();
+
     public final static TableColumnConcept COLUMN_CONCEPT_TEMPERATURE = TableColumnConcept.builder()
             .uri(COLUMN_CONCEPT_TEMPERATURE_URI)
             .name(COLUMN_CONCEPT_TEMPERATURE_NAME)
@@ -1935,6 +1939,12 @@ public abstract class BaseTest {
             .description(COLUMN_CONCEPT_FAIR_DATA_DESCRIPTION)
             .build();
 
+    public final static ConceptDto COLUMN_CONCEPT_FAIR_DATA_DTO = ConceptDto.builder()
+            .uri(COLUMN_CONCEPT_FAIR_DATA_URI)
+            .name(COLUMN_CONCEPT_FAIR_DATA_NAME)
+            .description(COLUMN_CONCEPT_FAIR_DATA_DESCRIPTION)
+            .build();
+
     public final static TableColumnConcept COLUMN_CONCEPT_FAIR_DATA = TableColumnConcept.builder()
             .uri(COLUMN_CONCEPT_FAIR_DATA_URI)
             .name(COLUMN_CONCEPT_FAIR_DATA_NAME)
@@ -1953,6 +1963,12 @@ public abstract class BaseTest {
             .description(COLUMN_UNIT_DEGREES_CELSIUS_DESCRIPTION)
             .build();
 
+    public final static UnitDto COLUMN_UNIT_DEGREES_CELSIUS_DTO = UnitDto.builder()
+            .uri(COLUMN_UNIT_DEGREES_CELSIUS_URI)
+            .name(COLUMN_UNIT_DEGREES_CELSIUS_NAME)
+            .description(COLUMN_UNIT_DEGREES_CELSIUS_DESCRIPTION)
+            .build();
+
     public final static TableColumnUnit COLUMN_UNIT_DEGREES_CELSIUS = TableColumnUnit.builder()
             .uri(COLUMN_UNIT_DEGREES_CELSIUS_URI)
             .name(COLUMN_UNIT_DEGREES_CELSIUS_NAME)
@@ -1971,6 +1987,12 @@ public abstract class BaseTest {
             .description(COLUMN_UNIT_TON_DESCRIPTION)
             .build();
 
+    public final static UnitDto COLUMN_UNIT_TON_DTO = UnitDto.builder()
+            .uri(COLUMN_UNIT_TON_URI)
+            .name(COLUMN_UNIT_TON_NAME)
+            .description(COLUMN_UNIT_TON_DESCRIPTION)
+            .build();
+
     public final static TableColumnUnit COLUMN_UNIT_TON = TableColumnUnit.builder()
             .uri(COLUMN_UNIT_TON_URI)
             .name(COLUMN_UNIT_TON_NAME)
diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml
index 261784bc3f666e7ab4a831ce26edbd99a6baf06b..afda4b6f98bf98c75461264ab8b367a71e3e74e7 100644
--- a/dbrepo-metadata-service/pom.xml
+++ b/dbrepo-metadata-service/pom.xml
@@ -14,7 +14,7 @@
     <name>dbrepo-metadata-service</name>
     <description>Service that manages the metadata</description>
 
-    <url>https://dbrepo-docs.ossdip.at</url>
+    <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/</url>
     <developers>
         <developer>
             <name>Martin Weise</name>
@@ -49,6 +49,7 @@
         <keycloak.version>21.0.2</keycloak.version>
         <hibernate.version>6.2.2.Final</hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -83,6 +84,16 @@
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- Monitoring -->
         <dependency>
             <groupId>io.micrometer</groupId>
@@ -150,6 +161,12 @@
             <version>${springdoc-openapi.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java
index 1b6c8a38f5dbc21dc2db7f1d3bff8aa439cd55ec..e0c645dc8f2f959eef360806fc82efa417fa8ac1 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -10,11 +11,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 @EnableJpaAuditing
-@SpringBootApplication
 @EnableTransactionManagement
-@EntityScan(basePackages = "at.tuwien.entities")
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EntityScan(basePackages = {"at.tuwien.entities"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoMetadataServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml
index f57bf10f481fe31e4af4c61d30df701738d33da4..059f9f1e67dac2a6033a4527e0e12e37cf53a9be 100644
--- a/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-metadata-service/rest-service/src/main/resources/application-local.yml
@@ -25,6 +25,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
index 0ec7b7bc08a59b9937c4b797e344b2383e3ff02d..86acf0f63e5b41e0b80c3d3ce6ea0e918308a74d 100644
--- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
@@ -25,6 +27,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java
index 1fb428714fdf1fa75282b71d90a21d0eff971b21..023419b218b20f2c72875f3a6fff4ad0f50026d7 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/endpoints/MetadataEndpointUnitTest.java
@@ -3,10 +3,8 @@ package at.tuwien.endpoints;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.oaipmh.OaiListIdentifiersParameters;
 import at.tuwien.oaipmh.OaiRecordParameters;
-import at.tuwien.config.H2Utils;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
index 26da5e82fa6040a62ecf2bfc5aeb1b4867d54512..024a91d3204e0742e5712fd6e1e96862e6a1888f 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/IdentifierServiceIntegrationTest.java
@@ -1,10 +1,9 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.config.H2Utils;
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.IdentifierNotFoundException;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java
index e8e68400ee2fd9fd49d9068f295809a8c369a554..13f015213effec80e94ac457c8201795c24fbb71 100644
--- a/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java
+++ b/dbrepo-metadata-service/rest-service/src/test/java/at/tuwien/service/MetadataServiceIntegrationTest.java
@@ -4,9 +4,8 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.oaipmh.OaiErrorType;
 import at.tuwien.oaipmh.OaiListIdentifiersParameters;
 import at.tuwien.oaipmh.OaiRecordParameters;
-import at.tuwien.config.H2Utils;
 import at.tuwien.exception.IdentifierNotFoundException;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index d692b00041998c9ac88e35465508fab23be7d674..04a8da854e9fdcc99a059c3aa1d7728e21b8780b 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 87%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index ae76b3951eb6f139358713c33cb2a4b3acad8ec7..df6ec321689ad7fa1c05eb1430177aae79122133 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
similarity index 88%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
index 0b79897fc81d6a58ef57df74a3b7e4d93ecd5d5a..27706deae379000a1b7fbf4ca6ffcb2941094609 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.Identifier;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 88%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index c033bd17dc63c7c0f8cb8b2354c689578d3eccf7..b1020fdcc532602d72cad5018b964edec4f25eea 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
similarity index 88%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
index 6a2a5443d938b9cad6e10d40114ef4d0f5f950db..1be6bbd2549e0e8dc2fa00dea458ccb1211d52c0 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Realm;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 88%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 3dbd267234e83405566ae6c9f5efe3260d38b875..c1e1d08295b85548041332353abfcee62c29e2df 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/elastic/IdentifieridxRepository.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java
similarity index 68%
rename from dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/elastic/IdentifieridxRepository.java
rename to dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java
index cffa3d3cfd19c0e006e827426eb6ce4be74be228..bfa5c3c6aac94fb19a4b9fa9627427df103440fa 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/elastic/IdentifieridxRepository.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/repository/sdb/IdentifierIdxRepository.java
@@ -1,9 +1,9 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.entities.identifier.Identifier;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface IdentifieridxRepository extends ElasticsearchRepository<Identifier, Long> {
+public interface IdentifierIdxRepository extends ElasticsearchRepository<Identifier, Long> {
 }
\ No newline at end of file
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
index 09cf17d37b81728bda86ee3aefb6b7397d6d7fed..762d58c64c4f64f367e1ddb7e89bf99612c002e6 100644
--- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.IdentifierNotFoundException;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
 import at.tuwien.service.IdentifierService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-query-service/pom.xml b/dbrepo-query-service/pom.xml
index 095adfeb17d64c98ef2f078fa41c0c3973cf5e19..73c0a87169dcd8cc59ba1631076bba6df45f5766 100644
--- a/dbrepo-query-service/pom.xml
+++ b/dbrepo-query-service/pom.xml
@@ -17,7 +17,7 @@
         also allows for view-only (possibly paginated and versioned) query execution to the raw data and consumes
         messages in the message queue from the Broker Service.
     </description>
-    <url>https://dbrepo-docs.ossdip.at</url>
+    <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/</url>
     <developers>
         <developer>
             <name>Martin Weise</name>
@@ -51,6 +51,7 @@
         <c3p0.version>0.9.5.5</c3p0.version>
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -121,8 +122,14 @@
             <version>${mariadb.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- AMPQ -->
         <dependency>
@@ -184,6 +191,12 @@
             <scope>compile</scope>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java
index af5e7ef22913baf7206dca51f5f9c6147bd29b27..d19bb8c6f3dc36c6605fc953e671794db5a3d034 100644
--- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java
+++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -10,12 +11,12 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @EnableJpaAuditing
-@SpringBootApplication
 @EnableTransactionManagement
 @EnableScheduling
-@EntityScan(basePackages = "at.tuwien.entities")
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EntityScan(basePackages = {"at.tuwien.entities"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoQueryServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-query-service/rest-service/src/main/resources/application-local.yml b/dbrepo-query-service/rest-service/src/main/resources/application-local.yml
index 32b8a33c40da0168e779a5b2ae3622107e623214..f28840615e0be9ed6a8718508cbf5e72186ab17e 100644
--- a/dbrepo-query-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-query-service/rest-service/src/main/resources/application-local.yml
@@ -25,10 +25,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-query-service/rest-service/src/main/resources/application.yml b/dbrepo-query-service/rest-service/src/main/resources/application.yml
index db37d874ec942755cc879f26242862f6330ca488..216631f9030f8635cf5733a3a448092d4c91d2d4 100644
--- a/dbrepo-query-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-query-service/rest-service/src/main/resources/application.yml
@@ -25,10 +25,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: elastic
-    uris: http://search-db:9200
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
index cab709d9c6692a9e2c0cc236520751659ec4306d..3ff9a8426725a8351080c9e32bc8392477eae7d2 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
@@ -2,6 +2,7 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -32,6 +33,9 @@ public class ActuatorComponentTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @Test
     public void actuatorInfo_succeeds() throws Exception {
         this.mockMvc.perform(get("/actuator/info"))
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java
index 6504e0471e47655607b1786e7fe65edeaaf75e60..2fc48f70c83a3dffd308be4bdf7ab411fb8a730f 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ExportEndpointUnitTest.java
@@ -8,10 +8,10 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.QueryService;
 import com.rabbitmq.client.Channel;
@@ -20,7 +20,6 @@ import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.core.io.InputStreamResource;
@@ -29,7 +28,6 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.security.test.context.support.WithAnonymousUser;
 import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
-import org.springframework.web.client.RestTemplate;
 
 import java.io.File;
 import java.io.IOException;
@@ -53,7 +51,10 @@ public class ExportEndpointUnitTest extends BaseUnitTest {
     private Channel channel;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
 
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
index 90634fa49a537eb13870da709c1a96c258c38a45..e9b3371a748ec4884b0662263805e55b096004d4 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
@@ -13,10 +13,11 @@ import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.querystore.Query;
-import at.tuwien.repository.jpa.ContainerRepository;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
-import at.tuwien.repository.jpa.DatabaseRepository;
-import at.tuwien.repository.jpa.ImageRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.mdb.ImageRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import at.tuwien.service.QueryService;
 import at.tuwien.service.StoreService;
 import com.rabbitmq.client.Channel;
@@ -55,13 +56,14 @@ public class QueryEndpointUnitTest extends BaseUnitTest {
     private Channel channel;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
 
-    /* keep */
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
index be64aff2a07f66b8f10d6e637a9894765a8c6ff6..e4d98d80443fd800b39b7f924461f1597558527d 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/StoreEndpointUnitTest.java
@@ -12,8 +12,8 @@ import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.querystore.Query;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.impl.StoreServiceImpl;
@@ -49,7 +49,10 @@ public class StoreEndpointUnitTest extends BaseUnitTest {
     private Channel channel;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
 
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
index 2f448ca36e90e3d81aac0e68ddaa7304fbeb5af9..0516fc4682104ce018f8d6e196884c79ae69cb51 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
@@ -2,6 +2,7 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -32,6 +33,9 @@ public class SwaggerComponentTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @Test
     public void swaggerUi_succeeds() throws Exception {
         this.mockMvc.perform(get("/swagger-ui/index.html"))
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java
index 263118e014726c3df8ed4a2c5262617bf555d8d0..0374aae586a6649c8e4570c503bd828fd41a8451 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableDataEndpointUnitTest.java
@@ -14,6 +14,7 @@ import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.TableService;
@@ -53,11 +54,12 @@ public class TableDataEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
-    /* keep */
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java
index 13f552f6ceedad6061334ca0e87794945c18d034..3a32885368f8e94f893786f6743aa227ff5095a6 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/TableHistoryEndpointUnitTest.java
@@ -9,9 +9,9 @@ import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.QueryService;
 import at.tuwien.service.TableService;
@@ -49,11 +49,12 @@ public class TableHistoryEndpointUnitTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
-    /* keep */
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java
index 0d26d44b03017e07172174d1310de7547787ee6a..9644e2113a9ab7c55bfeeaa5fad59f9f1dea3d6a 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java
@@ -14,6 +14,7 @@ import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.QueryService;
@@ -51,13 +52,14 @@ public class ViewEndpointUnitTest extends BaseUnitTest {
     private Channel channel;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
 
-    /* keep */
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java
index cadc876d8ba3ebcca9c3d3cffa44bf5d7c0941be..5acda1d8b2af83ba809bb9e050b7178514b44ac0 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/listener/RabbitMqListenerIntegrationTest.java
@@ -3,7 +3,8 @@ package at.tuwien.listener;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.amqp.ConsumerDto;
 import at.tuwien.config.*;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
@@ -38,6 +39,9 @@ public class RabbitMqListenerIntegrationTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @Autowired
     private Channel channel;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java
index f68804e6e06ff63e1fc574ce8a8590b08cb498d3..038b63c95a340e1f1266c40f7d7c9b44eb432322 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/mapper/QueryMapperTest.java
@@ -7,6 +7,7 @@ import at.tuwien.entities.container.image.ContainerImageDate;
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.entities.database.table.columns.TableColumnType;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -33,7 +34,10 @@ public class QueryMapperTest extends BaseUnitTest {
     private Channel channel;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
 
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java
index 647886a82434d0176e77399905ae3173f8565c80..1dd83a35bb7bbc2f9d4f27e1b8b641df2d44ac1d 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewIdxRepositoryIntegrationTest.java
@@ -8,8 +8,8 @@ import at.tuwien.entities.database.View;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.elastic.ViewIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
+import at.tuwien.repository.mdb.*;
 import at.tuwien.service.ViewService;
 import com.rabbitmq.client.Channel;
 import at.tuwien.config.DockerConfig;
@@ -48,11 +48,9 @@ public class ViewIdxRepositoryIntegrationTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
-    /* keep */
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java
index 726dc651d45c6220b1c67557675ec42f16adebb9..e064717095f46f3ccac6a190e63c92f9154548d5 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/repository/ViewRepositoryIntegrationTest.java
@@ -6,7 +6,8 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.View;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.Rule;
@@ -45,6 +46,9 @@ public class ViewRepositoryIntegrationTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @Autowired
     private ImageRepository imageRepository;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
index f009f87f64efa1a6ded33455300ab1c135303314..c4c6016e50a30f4302a99e23b940129bfc73b6a4 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
@@ -6,9 +6,9 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
@@ -40,11 +40,12 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
-    /* keep */
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
index cfef081d1eb3abf3fd94d998702b095f59b64f3d..7e8d87f8069fa7f1ce941fc5b2ba03c0671fa75a 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
@@ -12,7 +12,8 @@ import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.querystore.Query;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import at.tuwien.config.DockerConfig;
 import lombok.SneakyThrows;
@@ -63,6 +64,9 @@ public class QueryServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java
index 0091db3b8e627afa7a9564ad7cce78f6da31e9d3..7bc34bce9e0b2a967ae24f5cf082aabfd256e2c1 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/QueueServiceIntegrationTest.java
@@ -7,10 +7,10 @@ import at.tuwien.api.database.table.TableCsvDto;
 import at.tuwien.config.*;
 import at.tuwien.exception.AmqpException;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.DatabaseRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.rabbitmq.client.*;
 import lombok.extern.log4j.Log4j2;
@@ -27,7 +27,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.TimeoutException;
-import java.util.stream.Collectors;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -51,7 +50,10 @@ public class QueueServiceIntegrationTest extends BaseUnitTest {
     private TableRepository tableRepository;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private ViewIdxRepository viewIdxRepository;
+
+    @MockBean
+    private IndexConfig indexConfig;
 
     @MockBean
     private RabbitMqConsumer rabbitMqConsumer;
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java
index aa5e5024955c6f85ce88d07015a93127e8a25e06..559633c43bdeab1f176261266dfc80048779a623 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationModifyTest.java
@@ -10,7 +10,8 @@ import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.querystore.Query;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import at.tuwien.config.DockerConfig;
 import lombok.extern.log4j.Log4j2;
@@ -51,14 +52,15 @@ public class StoreServiceIntegrationModifyTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private Channel channel;
 
-    /* keep */
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java
index af081233297bfd2d93fd13469c9aaaf4e8c0b04a..f41d511770598114e12016f50a645396106f7680 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/StoreServiceIntegrationReadTest.java
@@ -7,9 +7,10 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
 import at.tuwien.querystore.Query;
-import at.tuwien.repository.jpa.DatabaseRepository;
-import at.tuwien.repository.jpa.TableRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import at.tuwien.config.DockerConfig;
 import lombok.extern.log4j.Log4j2;
@@ -48,6 +49,9 @@ public class StoreServiceIntegrationReadTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
index 4590f3e742eab0b7610c3e5e7d291b5d682f58b8..f7b8b21bffaf654347245c223cec91437f1fe6f6 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
@@ -8,7 +8,8 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import at.tuwien.config.DockerConfig;
 import lombok.extern.log4j.Log4j2;
@@ -48,11 +49,12 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest {
     @MockBean
     private Channel channel;
 
-    /* keep */
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
+
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
 
-    /* keep */
     @MockBean
     private BrokerServiceGateway brokerServiceGateway;
 
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
index a20232e18d492a3a110b8ade6e4d31c3bc8cf5e4..5c91cb6b6bc8258a88a414f419c1e9262f169345 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
@@ -6,9 +6,9 @@ import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
-import at.tuwien.listener.MessageQueueListener;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
@@ -42,7 +42,10 @@ public class TableServiceUnitTest extends BaseUnitTest {
     private Channel channel;
 
     @MockBean
-    private IndexConfig indexInitializer;
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private ViewIdxRepository viewIdxRepository;
 
     @MockBean
     private RabbitMqListenerImpl rabbitMqListener;
diff --git a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java
index dd8135d60e59922c405f6b69ca50e98f136b094b..10d216bf3bfc34f1c0b3b50bc95ea85126edbecc 100644
--- a/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java
+++ b/dbrepo-query-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java
@@ -10,8 +10,8 @@ import at.tuwien.entities.database.View;
 import at.tuwien.exception.*;
 import at.tuwien.gateway.BrokerServiceGateway;
 import at.tuwien.listener.impl.RabbitMqListenerImpl;
-import at.tuwien.repository.elastic.ViewIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.ViewIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import at.tuwien.config.DockerConfig;
 import lombok.extern.log4j.Log4j2;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
deleted file mode 100644
index 58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65..0000000000000000000000000000000000000000
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package at.tuwien.config;
-
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.json.jackson.JacksonJsonpMapper;
-import co.elastic.clients.transport.ElasticsearchTransport;
-import co.elastic.clients.transport.rest_client.RestClientTransport;
-import lombok.extern.log4j.Log4j2;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.elasticsearch.client.RestClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Log4j2
-@Configuration
-public class ElasticsearchConfig {
-
-    @Value("${spring.elasticsearch.uris}")
-    private String elasticEndpoint;
-
-    @Value("${spring.elasticsearch.username}")
-    private String elasticUsername;
-
-    @Value("${spring.elasticsearch.password}")
-    private String elasticPassword;
-
-    @Bean
-    public ElasticsearchClient elasticsearchClient() {
-        log.debug("elastic endpoint={}", elasticEndpoint);
-        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword));
-        final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint))
-                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
-                        .setDefaultCredentialsProvider(credentialsProvider))
-                .build();
-        ElasticsearchTransport transport = new RestClientTransport(
-                restClient, new JacksonJsonpMapper());
-        return new ElasticsearchClient(transport);
-    }
-
-}
\ No newline at end of file
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/IndexConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/IndexConfig.java
index eeb61eac82301fc0030619cfa3a3c6d53759109d..987fe6f81ed57b9a53d68b012abf840844db624e 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/config/IndexConfig.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/config/IndexConfig.java
@@ -2,16 +2,12 @@ package at.tuwien.config;
 
 import at.tuwien.api.database.ViewDto;
 import at.tuwien.mapper.ViewMapper;
-import at.tuwien.repository.elastic.ViewIdxRepository;
-import at.tuwien.repository.jpa.ViewRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
+import at.tuwien.repository.mdb.ViewRepository;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.event.EventListener;
-import org.springframework.core.env.Environment;
-import org.springframework.core.env.Profiles;
-import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
-import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -23,39 +19,24 @@ import java.util.stream.Collectors;
 public class IndexConfig {
 
     private final ViewMapper viewMapper;
-    private final Environment environment;
     private final ViewRepository viewRepository;
     private final ViewIdxRepository viewIdxRepository;
-    private final ElasticsearchOperations elasticsearchOperations;
 
     @Autowired
-    public IndexConfig(ViewMapper viewMapper, Environment environment, ViewRepository viewRepository,
-                       ViewIdxRepository viewIdxRepository, ElasticsearchOperations elasticsearchOperations) {
+    public IndexConfig(ViewMapper viewMapper, ViewRepository viewRepository, ViewIdxRepository viewIdxRepository) {
         this.viewMapper = viewMapper;
-        this.environment = environment;
         this.viewRepository = viewRepository;
         this.viewIdxRepository = viewIdxRepository;
-        this.elasticsearchOperations = elasticsearchOperations;
     }
 
     @Transactional
     @EventListener(ApplicationReadyEvent.class)
     public void initIndex() {
-        if (environment.acceptsProfiles(Profiles.of("test-noelastic"))) {
-            return;
-        }
-        log.debug("creating viewindex");
-        final IndexCoordinates viewIndex = IndexCoordinates.of("viewindex");
-        if (!elasticsearchOperations.indexOps(viewIndex).exists()) {
-            elasticsearchOperations.indexOps(viewIndex).create();
-            elasticsearchOperations.indexOps(viewIndex).createMapping(ViewDto.class);
-        }
-        /* pre-fill */
         final List<ViewDto> views = viewRepository.findAll()
                 .stream()
                 .map(viewMapper::viewToViewDto)
                 .collect(Collectors.toList());
-        log.debug("add {} views to elastic search index", views.size());
         viewIdxRepository.saveAll(views);
+        log.info("Added {} views to open search index", views.size());
     }
 }
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-query-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseIdxRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseIdxRepository.java
deleted file mode 100644
index 709fa7be4d25e1b2ae4351fde7281d701fc8cd79..0000000000000000000000000000000000000000
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/elastic/DatabaseIdxRepository.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package at.tuwien.repository.elastic;
-
-import at.tuwien.api.database.DatabaseDto;
-import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface DatabaseIdxRepository extends ElasticsearchRepository<DatabaseDto, Long> {
-}
\ No newline at end of file
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
deleted file mode 100644
index c1a5d756b7af9d163766f3a9fae3c31cf157a77c..0000000000000000000000000000000000000000
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package at.tuwien.repository.jpa;
-
-import at.tuwien.entities.user.Realm;
-import at.tuwien.entities.user.User;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-import java.util.UUID;
-
-@Repository
-public interface RealmRepository extends JpaRepository<Realm, UUID> {
-
-}
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index dac4fafd152d1b0a3064a49a748f1079080f1146..58b73c9139550a25bb020ad7590307991a3cd693 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
similarity index 83%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
index 2bfbfc3f90d9795a4ef4369532d04a5bfad56a3b..e4723eb9d2dc3c7aeadb81b5ac721a9ba3859ede 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.DatabaseAccess;
+import at.tuwien.entities.database.DatabaseAccessKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -9,7 +10,7 @@ import org.springframework.stereotype.Repository;
 import java.util.Optional;
 
 @Repository
-public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, Long> {
+public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> {
 
     @Query("select a from DatabaseAccess a where a.hdbid = :databaseId and a.user.username = :username")
     Optional<DatabaseAccess> findByDatabaseIdAndUsername(@Param("databaseId") Long databaseId, @Param("username") String username);
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 94%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index e73c2e7b2b4ef46bb683ffd847989749f50ffada..e5b21ce646cb8999a801aeeacd36214449c6f301 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
similarity index 91%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
index 7dd89d62041dd390b38765442173dd09d029f4ba..3bc2e7c168ddc4a6f6472dbc27fd0677ebbfaf07 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/IdentifierRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/IdentifierRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.identifier.Identifier;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 85%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index 21f191f8eddc0ebf9e0d6a01f8961a81f0fb6c39..ab4315e1c38828cdb432340f1b35d3bccc5b929b 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
index 5b5855dec88d3e3ef8d032369a7d6af6956a702e..7b53e7245983c7ca848da7c1175e0158e2f2a930 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Realm;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
similarity index 79%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
index 2d3a818d871ada46608d5b30b4603379d68e6161..dd34acefa6e12f8050e14c64886c416387ea1a83 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumn;
+import at.tuwien.entities.database.table.columns.TableColumnKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
similarity index 79%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
index 7a19c1f575891bd5fea52a4de87ea62b35c027bb..e4fe63d6239ceae9c9063e96a9533ad3a746f6da 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.Table;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
@@ -9,7 +10,7 @@ import org.springframework.stereotype.Repository;
 import java.util.Optional;
 
 @Repository
-public interface TableRepository extends JpaRepository<Table, Long> {
+public interface TableRepository extends JpaRepository<Table, TableKey> {
 
     @Query(value = "select t from Table t where t.database.container.id = :containerId and t.database.id = :databaseId and t.id = :tableId")
     Optional<Table> find(@Param("containerId") Long containerId, @Param("databaseId") Long databaseId,
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 90%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 9eb0b5190252b7e1890deb7717fe9b2afc133d41..42d09c3e9eaecff5b277e10a724ebfb857a91c8b 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java
similarity index 80%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java
index 3f5c2ac7c4c2167786fa96252083cd6801ee9965..322602ee2d8bfe668f3c9be2f1e8287c8e77cd54 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/jpa/ViewRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/mdb/ViewRepository.java
@@ -1,9 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.View;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.util.List;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/elastic/ViewIdxRepository.java b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java
similarity index 87%
rename from dbrepo-query-service/services/src/main/java/at/tuwien/repository/elastic/ViewIdxRepository.java
rename to dbrepo-query-service/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java
index 617c6d106e05a8b94707315a640c8fbce829d9ec..da608f39eb1959c0971cd42e8fc8535e1e7f70f4 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/repository/elastic/ViewIdxRepository.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/repository/sdb/ViewIdxRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.ViewDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
index 1c492b6529f648134818bfef8170695a849cbfc8..983a1bece772fc55c4c510d0600923c2fc69db1a 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
 import at.tuwien.service.AccessService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index 0e10cc3386798971ef213db326806b161f8cb00c..07c77c5358ad0dff79da6af0ea4ff7f3a4cf0fda 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.ContainerNotFoundException;
-import at.tuwien.repository.jpa.ContainerRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
 import at.tuwien.service.ContainerService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
index 79910ab9bf4aaec93670d22d6678eaac437ef59c..4a2a8927f76e589c747a6238c5db232533b7f665 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.DatabaseNotFoundException;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import at.tuwien.service.DatabaseService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
index e39dddeee311b831e97e41eef56d70a7cc3d30e1..9b1f1f8f1a25243bdb091e803e9eee1fa659aeeb 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/IdentifierServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.identifier.Identifier;
 import at.tuwien.exception.IdentifierNotFoundException;
-import at.tuwien.repository.jpa.IdentifierRepository;
+import at.tuwien.repository.mdb.IdentifierRepository;
 import at.tuwien.service.IdentifierService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
index 8a6c7d4ae27e94ace364b7015de563fc0f86f5ce..0ad279d9daa34122e068cfd0cca4f11e53f80e7a 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
@@ -7,7 +7,7 @@ import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DatabaseMapper;
 import at.tuwien.mapper.QueryMapper;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableRepository;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.TableService;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index d3c8b1659624e6b4e2df7a5c4bbbfa5f6c3f59e9..27cf23c9b99d375406f838a74f000e639b1e1fa3 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java
index 0bc0916966a49a99ad66d5a47c6daaaf39205aa3..e259d39c46b253a94107caa3fb836bd766ce1f7b 100644
--- a/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java
+++ b/dbrepo-query-service/services/src/main/java/at/tuwien/service/impl/ViewServiceImpl.java
@@ -8,8 +8,8 @@ import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.DatabaseMapper;
 import at.tuwien.mapper.ViewMapper;
-import at.tuwien.repository.elastic.ViewIdxRepository;
-import at.tuwien.repository.jpa.ViewRepository;
+import at.tuwien.repository.sdb.ViewIdxRepository;
+import at.tuwien.repository.mdb.ViewRepository;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.QueryService;
 import at.tuwien.service.UserService;
@@ -105,10 +105,9 @@ public class ViewServiceImpl extends HibernateConnector implements ViewService {
         }
         /* delete in metadata database */
         viewRepository.delete(view);
-        log.info("Deleted view with id {}", view.getId());
-        log.trace("deleted view {}", view);
+        log.info("Deleted view with id {} in metadata database", id);
         viewIdxRepository.deleteById(id);
-        log.info("Deleted view with id {} in elastic search", id);
+        log.info("Deleted view with id {} in open search database", id);
     }
 
     @Override
@@ -154,10 +153,9 @@ public class ViewServiceImpl extends HibernateConnector implements ViewService {
                 .columns(columns)
                 .build();
         final View view = viewRepository.save(entity);
-        log.info("Created view with id {}", view.getId());
-        log.trace("created view {}", view);
+        log.info("Created view with id {} in metadata database", view.getId());
         viewIdxRepository.save(viewMapper.viewToViewDto(view));
-        log.info("Created view with id {} in elastic search", view.getId());
+        log.info("Created view with id {} in open search database", view.getId());
         return view;
     }
 
diff --git a/dbrepo-search-db/README.md b/dbrepo-search-db/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..541ebd85974b41a2072a20127cd55d6de2f2a491
--- /dev/null
+++ b/dbrepo-search-db/README.md
@@ -0,0 +1,10 @@
+
+# Search Database
+
+## How to run
+
+Increase memory for Docker to at least 4GB:
+
+```console
+sudo sysctl -w vm.max_map_count=262144
+```
\ No newline at end of file
diff --git a/dbrepo-semantics-service/pom.xml b/dbrepo-semantics-service/pom.xml
index 3eed3ff468a3e1d41e2444bc07b74db768f4c8d1..8276456a2caa204ac8aeb5a9f7cce5cdfd790b71 100644
--- a/dbrepo-semantics-service/pom.xml
+++ b/dbrepo-semantics-service/pom.xml
@@ -36,6 +36,7 @@
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <apache-jena.version>4.8.0</apache-jena.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -92,7 +93,23 @@
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java
index bec2e19c3b2a0755da8c7352d63690bf8c121a9c..e7318edaef61fd014e8ac37f71697902c955098a 100644
--- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java
+++ b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java
@@ -3,6 +3,7 @@ package at.tuwien;
 import org.apache.jena.sys.JenaSystem;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -12,8 +13,8 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 @EnableJpaAuditing
 @SpringBootApplication
 @EntityScan(basePackages = {"at.tuwien.entities"})
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
 public class DbrepoSemanticsServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml b/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml
index cea3a41bb4f0e062040fe0eaa35a95246d66a0ae..9ba665a0231498753b34f2b07cb4437c38bbb782 100644
--- a/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-semantics-service/rest-service/src/main/resources/application-local.yml
@@ -25,10 +25,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/application.yml b/dbrepo-semantics-service/rest-service/src/main/resources/application.yml
index 7e35d82129116a29148421bf5d86238d1d6e97cd..5ebeb484bd69b0a17c61704c8dcbd952bac7db6a 100644
--- a/dbrepo-semantics-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-semantics-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
@@ -25,10 +27,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: elastic
-    uris: http://search-db:9200
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
index 3cfe18382347d7472f16ec9d5c4de5d618743bdd..8b1065599ab362c4c50486e5a704a55f6040dcaf 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
@@ -1,12 +1,15 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.test.web.servlet.MockMvc;
 
@@ -20,6 +23,18 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @SpringBootTest
 public class ActuatorComponentTest extends BaseUnitTest {
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @Autowired
     private MockMvc mockMvc;
 
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java
index 00ad512534c9cc5dea5bd3a6bc7f369914c60012..97899e119c260df19f9c2abb1e4e20d27cf326d5 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/OntologyEndpointUnitTest.java
@@ -11,6 +11,8 @@ import at.tuwien.entities.semantics.Ontology;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.OntologyNotFoundException;
 import at.tuwien.exception.UserNotFoundException;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import at.tuwien.service.OntologyService;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
@@ -40,15 +42,27 @@ import static org.mockito.Mockito.*;
 @ExtendWith(SpringExtension.class)
 public class OntologyEndpointUnitTest extends BaseUnitTest {
 
-    @Autowired
-    private OntologyEndpoint ontologyEndpoint;
-
     @MockBean
     private OntologyService ontologyService;
 
     @MockBean
     private UserService userService;
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
+    @Autowired
+    private OntologyEndpoint ontologyEndpoint;
+
     @BeforeAll
     public static void beforeAll() {
         JenaSystem.init();
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
index 66e2c1cba53d52dc6fd9ec1045451115d7b4ea62..3e910cf7bde17180698f7e2cb64579c203513ace 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/QueryEndpointUnitTest.java
@@ -10,6 +10,8 @@ import at.tuwien.exception.FilterBadRequestException;
 import at.tuwien.exception.OntologyNotFoundException;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.exception.UriMalformedException;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import at.tuwien.service.OntologyService;
 import at.tuwien.service.QueryService;
 import lombok.extern.log4j.Log4j2;
@@ -40,15 +42,27 @@ import static org.mockito.Mockito.*;
 @ExtendWith(SpringExtension.class)
 public class QueryEndpointUnitTest extends BaseUnitTest {
 
-    @Autowired
-    private QueryEndpoint queryEndpoint;
-
     @MockBean
     private QueryService queryService;
 
     @MockBean
     private OntologyService ontologyService;
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
+    @Autowired
+    private QueryEndpoint queryEndpoint;
+
     @BeforeAll
     public static void beforeAll() {
         JenaSystem.init();
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java
index 64adc9cad1b3c64acac9f5c92a3912355f395466..64736a60c695b4eb2a2382ea01a94942ff34e43e 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SemanticsEndpointUnitTest.java
@@ -9,6 +9,8 @@ import at.tuwien.api.database.table.columns.concepts.UnitSaveDto;
 import at.tuwien.endpoints.SemanticsEndpoint;
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import at.tuwien.service.SemanticService;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.sys.JenaSystem;
@@ -37,12 +39,24 @@ import static org.mockito.Mockito.when;
 @ExtendWith(SpringExtension.class)
 public class SemanticsEndpointUnitTest extends BaseUnitTest {
 
-    @Autowired
-    private SemanticsEndpoint semanticsEndpoint;
-
     @MockBean
     private SemanticService semanticService;
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
+    @Autowired
+    private SemanticsEndpoint semanticsEndpoint;
+
     @BeforeAll
     public static void beforeAll() {
         JenaSystem.init();
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
index 7c68901e8871dd03803f4ffce081a073016ce995..3b7a77cb4eec3fb093cdc366a4ca7d211b00dda6 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
@@ -1,12 +1,15 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.test.web.servlet.MockMvc;
 
@@ -23,6 +26,18 @@ public class SwaggerComponentTest extends BaseUnitTest {
     @Autowired
     private MockMvc mockMvc;
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @Test
     public void swaggerUi_succeeds() throws Exception {
         this.mockMvc.perform(get("/swagger-ui/index.html"))
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
index cd5dc23cd807c7e066fa80796a28a1a0917e8212..ab61a7970c239d504f693ed59a631b2cb9d5577a 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
@@ -10,6 +10,8 @@ import at.tuwien.exception.OntologyNotFoundException;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.exception.TableColumnNotFoundException;
 import at.tuwien.exception.TableNotFoundException;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import at.tuwien.service.OntologyService;
 import at.tuwien.service.TableService;
 import lombok.extern.log4j.Log4j2;
@@ -39,12 +41,24 @@ import static org.mockito.Mockito.*;
 @ExtendWith(SpringExtension.class)
 public class TableEndpointUnitTest extends BaseUnitTest {
 
-    @Autowired
-    private TableEndpoint tableEndpoint;
-
     @MockBean
     private TableService tableService;
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
+    @Autowired
+    private TableEndpoint tableEndpoint;
+
     @BeforeAll
     public static void beforeAll() {
         JenaSystem.init();
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java
index 1dc8023c3d8bcf3499b09df8a5fbadb06535565f..190f498e113fa1965ea5bac5463d20f97a24b28f 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/OntologyServiceIntegrationTest.java
@@ -4,9 +4,11 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.entities.semantics.Ontology;
 import at.tuwien.exception.OntologyNotFoundException;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.OntologyRepository;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.sys.JenaSystem;
 import org.junit.jupiter.api.BeforeAll;
@@ -15,6 +17,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -29,6 +32,18 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 @ExtendWith(SpringExtension.class)
 public class OntologyServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @Autowired
     private OntologyService ontologyService;
 
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
index 42af85f682e383c07469c9ac9f6abdac422ed202..33df1ac72b8f83919da67d215127b2c7c330ea23 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/QueryServiceIntegrationTest.java
@@ -3,9 +3,11 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.api.semantics.EntityDto;
 import at.tuwien.exception.QueryMalformedException;
-import at.tuwien.repository.jpa.OntologyRepository;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.sys.JenaSystem;
 import org.junit.jupiter.api.BeforeAll;
@@ -15,6 +17,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -28,6 +31,18 @@ import static org.junit.jupiter.api.Assertions.*;
 @ExtendWith(SpringExtension.class)
 public class QueryServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @Autowired
     private RealmRepository realmRepository;
 
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java
index ed5171a3327ff929282ee9b5d71c477220a46213..ccd14d910e0556dcd31b20a3ca3652e57b92e395 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/SemanticServiceUnitTest.java
@@ -1,9 +1,13 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.api.database.table.columns.concepts.ConceptDto;
+import at.tuwien.api.database.table.columns.concepts.UnitDto;
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.mdb.*;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.sys.JenaSystem;
 import org.junit.jupiter.api.BeforeAll;
@@ -26,6 +30,18 @@ import static org.mockito.Mockito.when;
 @ExtendWith(SpringExtension.class)
 public class SemanticServiceUnitTest extends BaseUnitTest {
 
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @MockBean
     private TableColumnConceptRepository tableColumnConceptRepository;
 
@@ -75,6 +91,8 @@ public class SemanticServiceUnitTest extends BaseUnitTest {
     public void saveUnit_exists_succeeds() {
 
         /* mock */
+        when(unitIdxRepository.save(any(UnitDto.class)))
+                .thenReturn(COLUMN_UNIT_DEGREES_CELSIUS_DTO);
         when(tableColumnUnitRepository.save(any(TableColumnUnit.class)))
                 .thenReturn(COLUMN_UNIT_DEGREES_CELSIUS);
 
@@ -89,6 +107,8 @@ public class SemanticServiceUnitTest extends BaseUnitTest {
     public void saveUnit_succeeds() {
 
         /* mock */
+        when(unitIdxRepository.save(any(UnitDto.class)))
+                .thenReturn(COLUMN_UNIT_TON_DTO);
         when(tableColumnUnitRepository.save(any(TableColumnUnit.class)))
                 .thenReturn(COLUMN_UNIT_TON);
 
@@ -103,6 +123,8 @@ public class SemanticServiceUnitTest extends BaseUnitTest {
     public void saveConcept_exists_succeeds() {
 
         /* mock */
+        when(conceptIdxRepository.save(any(ConceptDto.class)))
+                .thenReturn(COLUMN_CONCEPT_TEMPERATURE_DTO);
         when(tableColumnConceptRepository.save(any(TableColumnConcept.class)))
                 .thenReturn(COLUMN_CONCEPT_TEMPERATURE);
 
@@ -117,6 +139,8 @@ public class SemanticServiceUnitTest extends BaseUnitTest {
     public void saveConcept_succeeds() {
 
         /* mock */
+        when(conceptIdxRepository.save(any(ConceptDto.class)))
+                .thenReturn(COLUMN_CONCEPT_FAIR_DATA_DTO);
         when(tableColumnConceptRepository.save(any(TableColumnConcept.class)))
                 .thenReturn(COLUMN_CONCEPT_FAIR_DATA);
 
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java
index c81035a6db938872ba93eb540d3dff5c6b85f6ae..81e639918180bec7535bcba43c33a5e757190af0 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java
@@ -7,9 +7,11 @@ import at.tuwien.entities.database.table.columns.TableColumnKey;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.exception.TableColumnNotFoundException;
 import at.tuwien.exception.TableNotFoundException;
-import at.tuwien.repository.jpa.OntologyRepository;
-import at.tuwien.repository.jpa.TableColumnRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
+import at.tuwien.repository.mdb.TableColumnRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.sys.JenaSystem;
 import org.junit.jupiter.api.BeforeAll;
@@ -32,8 +34,17 @@ import static org.mockito.Mockito.when;
 @ExtendWith(SpringExtension.class)
 public class TableServiceIntegrationTest extends BaseUnitTest {
 
-    @Autowired
-    private TableService tableService;
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
 
     @MockBean
     private TableRepository tableRepository;
@@ -44,6 +55,9 @@ public class TableServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private TableColumnRepository tableColumnRepository;
 
+    @Autowired
+    private TableService tableService;
+
     @BeforeAll
     public static void beforeAll() {
         JenaSystem.init();
diff --git a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
index f84d3ea1d96b118a7da4bd468b11bfa4303a6045..eddc6dbad55e4b1894da41b4ad0e238a928950d7 100644
--- a/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
+++ b/dbrepo-semantics-service/rest-service/src/test/java/at/tuwien/service/TableServiceUnitTest.java
@@ -3,7 +3,9 @@ package at.tuwien.service;
 import at.tuwien.BaseUnitTest;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.TableNotFoundException;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.sys.JenaSystem;
 import org.junit.jupiter.api.BeforeAll;
@@ -25,12 +27,24 @@ import static org.mockito.Mockito.when;
 @ExtendWith(SpringExtension.class)
 public class TableServiceUnitTest extends BaseUnitTest {
 
-    @Autowired
-    private TableService tableService;
+    @MockBean
+    private UnitIdxRepository unitIdxRepository;
+
+    @MockBean
+    private ConceptIdxRepository conceptIdxRepository;
+
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
 
     @MockBean
     private TableRepository tableRepository;
 
+    @Autowired
+    private TableService tableService;
+
     @BeforeAll
     public static void beforeAll() {
         JenaSystem.init();
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
deleted file mode 100644
index 58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65..0000000000000000000000000000000000000000
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package at.tuwien.config;
-
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.json.jackson.JacksonJsonpMapper;
-import co.elastic.clients.transport.ElasticsearchTransport;
-import co.elastic.clients.transport.rest_client.RestClientTransport;
-import lombok.extern.log4j.Log4j2;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.elasticsearch.client.RestClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Log4j2
-@Configuration
-public class ElasticsearchConfig {
-
-    @Value("${spring.elasticsearch.uris}")
-    private String elasticEndpoint;
-
-    @Value("${spring.elasticsearch.username}")
-    private String elasticUsername;
-
-    @Value("${spring.elasticsearch.password}")
-    private String elasticPassword;
-
-    @Bean
-    public ElasticsearchClient elasticsearchClient() {
-        log.debug("elastic endpoint={}", elasticEndpoint);
-        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword));
-        final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint))
-                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
-                        .setDefaultCredentialsProvider(credentialsProvider))
-                .build();
-        ElasticsearchTransport transport = new RestClientTransport(
-                restClient, new JacksonJsonpMapper());
-        return new ElasticsearchClient(transport);
-    }
-
-}
\ No newline at end of file
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index 39566b1cc0c471f71212f9319e1497d0e3dcac66..f41d2aa3fae70608ac913bde9ae299d57ce5b0a4 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 88%
rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index 688993ab3ca2e32edeb59b6c66dc838f58333b02..c11a773abc70ade28fdf7aa45845043fafcdd314 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index 247ce97770d636831aef83e8cc1a471ed67019a9..046fd51c3edd4a04becd27a2017cb38c88278ac7 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
similarity index 88%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
index 75c296f527e5a1b04d8a326673ca35f88519e842..fab911633e762bcca06113efbbed06e01f2e4e0f 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.semantics.Ontology;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b53e7245983c7ca848da7c1175e0158e2f2a930
--- /dev/null
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -0,0 +1,12 @@
+package at.tuwien.repository.mdb;
+
+import at.tuwien.entities.user.Realm;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.UUID;
+
+@Repository
+public interface RealmRepository extends JpaRepository<Realm, UUID> {
+
+}
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnConceptRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java
similarity index 89%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnConceptRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java
index 25d6eaad40543b0fdc5a9ccc93eff0a6478a39da..63fe90eea77e37867fe917dc896ee3b96498ae85 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnConceptRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnConceptRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
similarity index 91%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
index 21a0612858636287e44ff7d3004d46e85372a82a..b52cc85d3552636e4463a848f651c45e6292a2cc 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.entities.database.table.columns.TableColumnKey;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnUnitRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java
similarity index 89%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnUnitRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java
index e24ab4d11a2c21eab867f135b1477df6e8c2c34c..ef80b22e06e31c795a3d1d5cc37d2d719cb1db88 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnUnitRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnUnitRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
similarity index 92%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
index 4935a9857bccbdeb715d1d467f299e43ca4df5cb..773cac2b6e2fe0f2bf359d600699a817493d0d0e 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.database.table.TableKey;
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 90%
rename from dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 9eb0b5190252b7e1890deb7717fe9b2afc133d41..42d09c3e9eaecff5b277e10a724ebfb857a91c8b 100644
--- a/dbrepo-container-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..a311002ac39720e119e81a050b0655cdb107aa36
--- /dev/null
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/ConceptIdxRepository.java
@@ -0,0 +1,9 @@
+package at.tuwien.repository.sdb;
+
+import at.tuwien.api.database.table.columns.concepts.ConceptDto;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ConceptIdxRepository extends ElasticsearchRepository<ConceptDto, String> {
+}
\ No newline at end of file
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
similarity index 67%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
index 7df09d4e44e484f1e1a79beb9cd81c294b34d103..7fcd93f71355f255332880e121adeaca01aff919 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
@@ -1,9 +1,10 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.table.columns.ColumnDto;
+import at.tuwien.api.database.table.columns.ColumnKeyDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, Long> {
+public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, ColumnKeyDto> {
 }
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
similarity index 69%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java
rename to dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
index ce6e8a0975a29bdcddaa03d316d0b158c1fd8139..fd501ffdcc41a301df1b196b8b6a2bf0ec0911c6 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
@@ -1,9 +1,10 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.table.TableDto;
+import at.tuwien.api.database.table.TableKeyDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableIdxRepository extends ElasticsearchRepository<TableDto, Long> {
+public interface TableIdxRepository extends ElasticsearchRepository<TableDto, TableKeyDto> {
 }
\ No newline at end of file
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b7301819e945ea130bb868f90ef0fcb03474266
--- /dev/null
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/sdb/UnitIdxRepository.java
@@ -0,0 +1,9 @@
+package at.tuwien.repository.sdb;
+
+import at.tuwien.api.database.table.columns.concepts.UnitDto;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UnitIdxRepository extends ElasticsearchRepository<UnitDto, String> {
+}
\ No newline at end of file
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java
index 5137f9f92d234d32b3f905fa634b13a68777c7a0..411ea767ecdfce7de3f8613ad690f618f96df431 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/OntologyServiceImpl.java
@@ -7,7 +7,7 @@ import at.tuwien.entities.user.User;
 import at.tuwien.exception.OntologyNotFoundException;
 import at.tuwien.exception.UserNotFoundException;
 import at.tuwien.mapper.OntologyMapper;
-import at.tuwien.repository.jpa.OntologyRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
 import at.tuwien.service.OntologyService;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java
index 742c2090371ede84aa77b90e3dd00c862388bd4c..802b0e7a07e0e8f8cd43176f4edb1214eb2ba31a 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/QueryServiceImpl.java
@@ -4,7 +4,7 @@ import at.tuwien.api.semantics.EntityDto;
 import at.tuwien.entities.semantics.Ontology;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.mapper.OntologyMapper;
-import at.tuwien.repository.jpa.OntologyRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
 import at.tuwien.service.QueryService;
 import lombok.extern.log4j.Log4j2;
 import org.apache.jena.query.*;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
index 34e38612fb8527969226d695b876e6f97d0adeaf..1a1360165f610a6d377112f20827b12d34d68d63 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
@@ -1,12 +1,16 @@
 package at.tuwien.service.impl;
 
+import at.tuwien.api.database.table.columns.concepts.ConceptDto;
 import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto;
+import at.tuwien.api.database.table.columns.concepts.UnitDto;
 import at.tuwien.api.database.table.columns.concepts.UnitSaveDto;
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
 import at.tuwien.mapper.OntologyMapper;
-import at.tuwien.repository.jpa.TableColumnConceptRepository;
-import at.tuwien.repository.jpa.TableColumnUnitRepository;
+import at.tuwien.repository.mdb.TableColumnConceptRepository;
+import at.tuwien.repository.mdb.TableColumnUnitRepository;
+import at.tuwien.repository.sdb.ConceptIdxRepository;
+import at.tuwien.repository.sdb.UnitIdxRepository;
 import at.tuwien.service.SemanticService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,13 +24,18 @@ import java.util.List;
 public class SemanticServiceImpl implements SemanticService {
 
     private final OntologyMapper ontologyMapper;
+    private final UnitIdxRepository unitIdxRepository;
+    private final ConceptIdxRepository conceptIdxRepository;
     private final TableColumnUnitRepository tableColumnUnitRepository;
     private final TableColumnConceptRepository tableColumnConceptRepository;
 
     @Autowired
     public SemanticServiceImpl(TableColumnConceptRepository tableColumnConceptRepository,
-                               TableColumnUnitRepository tableColumnUnitRepository, OntologyMapper ontologyMapper) {
+                               TableColumnUnitRepository tableColumnUnitRepository, OntologyMapper ontologyMapper,
+                               UnitIdxRepository unitIdxRepository, ConceptIdxRepository conceptIdxRepository) {
         this.ontologyMapper = ontologyMapper;
+        this.unitIdxRepository = unitIdxRepository;
+        this.conceptIdxRepository = conceptIdxRepository;
         this.tableColumnUnitRepository = tableColumnUnitRepository;
         this.tableColumnConceptRepository = tableColumnConceptRepository;
     }
@@ -48,7 +57,10 @@ public class SemanticServiceImpl implements SemanticService {
     public TableColumnConcept saveConcept(ConceptSaveDto data) {
         final TableColumnConcept entity = ontologyMapper.conceptSaveDtoToTableColumnConcept(data);
         final TableColumnConcept concept = tableColumnConceptRepository.save(entity);
-        log.info("Saved concept with uri {}", concept.getUri());
+        log.info("Saved concept with uri {} in metadata database", concept.getUri());
+        final ConceptDto conceptDto = ontologyMapper.tableColumnConceptToConceptDto(concept);
+        conceptIdxRepository.save(conceptDto);
+        log.info("Saved concept with uri {} in open search database", conceptDto.getUri());
         return concept;
     }
 
@@ -57,7 +69,10 @@ public class SemanticServiceImpl implements SemanticService {
     public TableColumnUnit saveUnit(UnitSaveDto data) {
         final TableColumnUnit entity = ontologyMapper.unitSaveDtoToTableColumnUnit(data);
         final TableColumnUnit unit = tableColumnUnitRepository.save(entity);
-        log.info("Saved unit with uri {}", unit.getUri());
+        log.info("Saved unit with uri {} in metadata database", unit.getUri());
+        final UnitDto unitDto = ontologyMapper.tableColumnUnitToUnitDto(unit);
+        unitIdxRepository.save(unitDto);
+        log.info("Saved unit with uri {} in open search database", unitDto.getUri());
         return unit;
     }
 
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
index 8f586250943b420093aa2a0c8e6f73baa537c4a4..cab89efe6cfa87bf811252d33b8ec5e8c6cfed31 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
@@ -10,8 +10,8 @@ import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.exception.TableColumnNotFoundException;
 import at.tuwien.exception.TableNotFoundException;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.jpa.TableColumnRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableColumnRepository;
+import at.tuwien.repository.mdb.TableRepository;
 import at.tuwien.service.OntologyService;
 import at.tuwien.service.QueryService;
 import at.tuwien.service.TableService;
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 99bc7ae5d4b79169e3864397427310ef9e78ffab..43e1ae2d23b34719f8cf2e70cb9b6e6c46acec8e 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-semantics-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/pom.xml b/dbrepo-table-service/pom.xml
index a044da6517ab1c9faa02e61d019ab66831c47709..b686d22c3b998f5a21b851b03cae9c6361d52150 100644
--- a/dbrepo-table-service/pom.xml
+++ b/dbrepo-table-service/pom.xml
@@ -34,6 +34,7 @@
         <c3p0.version>0.9.5.5</c3p0.version>
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -119,15 +120,21 @@
             <artifactId>hibernate-c3p0</artifactId>
             <version>${c3p0-hibernate.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.mariadb.jdbc</groupId>
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- SQL Parser -->
         <dependency>
             <groupId>com.github.jsqlparser</groupId>
@@ -148,6 +155,12 @@
             <version>${rabbit-amqp-client.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java
index a96e2effc7640acd1ec961656ee54d3a52fcd991..e472c70e310c7ad604e48bb8b7d782e9eddac845 100644
--- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java
+++ b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -10,11 +11,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 @EnableJpaAuditing
-@SpringBootApplication
 @EnableTransactionManagement
 @EntityScan(basePackages = {"at.tuwien.entities"})
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoTableServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml
index e3a4c13c91d34dbc066042c4c9a16b965bf53d66..8dc8303bbabab38482a172d08df1d700a766499f 100644
--- a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml
@@ -25,10 +25,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-table-service/rest-service/src/main/resources/application.yml b/dbrepo-table-service/rest-service/src/main/resources/application.yml
index ac70fe699af16b1c71725a7a8afe4c5737c46048..a91591b9aded11a41273baa828e6f627987d7894 100644
--- a/dbrepo-table-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-table-service/rest-service/src/main/resources/application.yml
@@ -25,10 +25,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: elastic
-    uris: http://search-db:9200
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
index cab709d9c6692a9e2c0cc236520751659ec4306d..1bb964bbbd36238e453369de069f2410707c5d25 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
@@ -2,6 +2,8 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -32,6 +34,12 @@ public class ActuatorComponentTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @Test
     public void actuatorInfo_succeeds() throws Exception {
         this.mockMvc.perform(get("/actuator/info"))
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
index 2f448ca36e90e3d81aac0e68ddaa7304fbeb5af9..ee93d9c9a2f25e91857bbc57d95ecbeea9557d4f 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
@@ -2,6 +2,8 @@ package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -32,6 +34,12 @@ public class SwaggerComponentTest extends BaseUnitTest {
     @MockBean
     private IndexConfig indexConfig;
 
+    @MockBean
+    private TableIdxRepository tableIdxRepository;
+
+    @MockBean
+    private TableColumnIdxRepository tableColumnIdxRepository;
+
     @Test
     public void swaggerUi_succeeds() throws Exception {
         this.mockMvc.perform(get("/swagger-ui/index.html"))
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java
index 2dd1a03a5affd3ba8a02eb9ca289aae1c0ba6fc9..6ba5c6fee755d26f86237f5a0d864f59a5434e53 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java
@@ -11,8 +11,8 @@ import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.TableService;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java
index e52f7c89de188832f1c681d461ffbb6ea30011db..ab7b30e6a3f35428b557a8255e9c08b1af81505f 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java
@@ -7,9 +7,9 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.TableEndpoint;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.AfterEach;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
index 3ea4f20546b2115a11e066387280f1976eac07be..49b1b0a66998bcf27080618c80bc4475b46f6922 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
@@ -11,8 +11,8 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.TableService;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
index c84163790cc840f4ac929c175cd5846f6d88ee65..3d27d0c923279e4cf3075b29998e44dfe07775cf 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
@@ -4,8 +4,8 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.AmqpException;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java
index 234ce6491ee4cd2468bd73ee7197f5e467d26b76..2ec5fe43e9de1b18260135d49920a36b840f5ca5 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java
@@ -1,15 +1,12 @@
 package at.tuwien.mapper;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.api.database.AccessTypeDto;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
-import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
index d91e8827fbe4446048bd10d50d12516fdf2e4de8..29b42b6f6f8eb0a1238e42845b7b7bfe9bd3ad9d 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
@@ -6,9 +6,8 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.config.DockerConfig;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.utils.AmqpUtils;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
@@ -46,7 +45,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     private TableColumnIdxRepository tableColumnidxRepository;
 
     @MockBean
-    private TableRepository tableRepository;
+    private at.tuwien.repository.mdb.TableRepository tableRepository;
 
     @Autowired
     private AmqpUtils amqpUtils;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
index 2759fe65b2bfe5b081b1914febbdc45547f9f418..e65f776d75a274c1e9ca50ef5e1193a1b39b9bda 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
@@ -7,9 +7,9 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
@@ -66,7 +66,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest {
     private DatabaseRepository databaseRepository;
 
     @Autowired
-    private TableRepository tableRepository;
+    private at.tuwien.repository.mdb.TableRepository tableRepository;
 
     @Autowired
     private TableService tableService;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
index d3482ae758f55d8dbf481b979c08762167ea3156..254d3c2d60d2aa7b7b35fc70813e730d9f95de08 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
@@ -8,9 +8,9 @@ import at.tuwien.config.H2Utils;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
@@ -67,7 +67,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest {
     private DatabaseRepository databaseRepository;
 
     @Autowired
-    private TableRepository tableRepository;
+    private at.tuwien.repository.mdb.TableRepository tableRepository;
 
     @Autowired
     private TableService tableService;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
deleted file mode 100644
index 58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65..0000000000000000000000000000000000000000
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package at.tuwien.config;
-
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.json.jackson.JacksonJsonpMapper;
-import co.elastic.clients.transport.ElasticsearchTransport;
-import co.elastic.clients.transport.rest_client.RestClientTransport;
-import lombok.extern.log4j.Log4j2;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.elasticsearch.client.RestClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Log4j2
-@Configuration
-public class ElasticsearchConfig {
-
-    @Value("${spring.elasticsearch.uris}")
-    private String elasticEndpoint;
-
-    @Value("${spring.elasticsearch.username}")
-    private String elasticUsername;
-
-    @Value("${spring.elasticsearch.password}")
-    private String elasticPassword;
-
-    @Bean
-    public ElasticsearchClient elasticsearchClient() {
-        log.debug("elastic endpoint={}", elasticEndpoint);
-        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword));
-        final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint))
-                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
-                        .setDefaultCredentialsProvider(credentialsProvider))
-                .build();
-        ElasticsearchTransport transport = new RestClientTransport(
-                restClient, new JacksonJsonpMapper());
-        return new ElasticsearchClient(transport);
-    }
-
-}
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java
index e6f97043de1c912ac605dc79840f1a0728b50e0c..6dfc32022e99a2c7dfdde8dc7887bed80208a49d 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java
@@ -3,18 +3,13 @@ package at.tuwien.config;
 import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.database.table.columns.ColumnDto;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.TableColumnRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableColumnRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import lombok.extern.log4j.Log4j2;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.event.EventListener;
-import org.springframework.core.env.Environment;
-import org.springframework.core.env.Profiles;
-import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
-import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -25,58 +20,35 @@ import java.util.stream.Collectors;
 @Log4j2
 public class IndexConfig {
 
-    private final Environment environment;
     private final TableMapper tableMapper;
     private final TableRepository tableRepository;
     private final TableIdxRepository tableIdxRepository;
     private final TableColumnRepository tableColumnRepository;
-    private final ElasticsearchOperations elasticsearchOperations;
     private final TableColumnIdxRepository tableColumnIdxRepository;
 
-    @Autowired
-    public IndexConfig(Environment environment, TableMapper tableMapper, TableRepository tableRepository,
-                       TableIdxRepository tableIdxRepository, TableColumnRepository tableColumnRepository,
-                       ElasticsearchOperations elasticsearchOperations,
-                       TableColumnIdxRepository tableColumnIdxRepository) {
-        this.environment = environment;
+    public IndexConfig(TableMapper tableMapper, TableRepository tableRepository, TableIdxRepository tableIdxRepository,
+                       TableColumnRepository tableColumnRepository, TableColumnIdxRepository tableColumnIdxRepository) {
         this.tableMapper = tableMapper;
         this.tableRepository = tableRepository;
         this.tableIdxRepository = tableIdxRepository;
         this.tableColumnRepository = tableColumnRepository;
-        this.elasticsearchOperations = elasticsearchOperations;
         this.tableColumnIdxRepository = tableColumnIdxRepository;
     }
 
     @Transactional
     @EventListener(ApplicationReadyEvent.class)
     public void initIndex() {
-        if (environment.acceptsProfiles(Profiles.of("test-noelastic"))) {
-            return;
-        }
-        log.debug("creating tableindex");
-        final IndexCoordinates tableIndex = IndexCoordinates.of("tableindex");
-        if (!elasticsearchOperations.indexOps(tableIndex).exists()) {
-            elasticsearchOperations.indexOps(tableIndex).create();
-            elasticsearchOperations.indexOps(tableIndex).createMapping(TableDto.class);
-        }
-        log.debug("creating columnindex");
-        final IndexCoordinates columnIndex = IndexCoordinates.of("columnindex");
-        if (!elasticsearchOperations.indexOps(columnIndex).exists()) {
-            elasticsearchOperations.indexOps(columnIndex).create();
-            elasticsearchOperations.indexOps(columnIndex).createMapping(ColumnDto.class);
-        }
-        /* pre-fill */
         final List<TableDto> tables = tableRepository.findAll()
                 .stream()
                 .map(tableMapper::tableToTableDto)
                 .collect(Collectors.toList());
-        log.debug("add {} tables to elastic search index", tables.size());
         tableIdxRepository.saveAll(tables);
+        log.info("Added {} tables to open search index", tables.size());
         final List<ColumnDto> columns = tableColumnRepository.findAll()
                 .stream()
                 .map(tableMapper::tableColumnToColumnDto)
                 .collect(Collectors.toList());
-        log.debug("add {} columns to elastic search index", columns.size());
         tableColumnIdxRepository.saveAll(columns);
+        log.info("Added {} columns to open search index", columns.size());
     }
 }
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
index 688e44c832e1e998f16018b995ab30ec542684bd..6c2d65f211cd4ea6ff3a501ba3e8d4b5cc6c70bb 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
@@ -7,9 +7,6 @@ import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.database.table.columns.ColumnCreateDto;
 import at.tuwien.api.database.table.columns.ColumnDto;
 import at.tuwien.api.database.table.columns.ColumnTypeDto;
-import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto;
-import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto;
-import at.tuwien.api.database.table.columns.concepts.UnitSaveDto;
 import at.tuwien.api.database.table.constraints.ConstraintsCreateDto;
 import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyCreateDto;
 import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyDto;
@@ -29,7 +26,7 @@ import at.tuwien.entities.database.table.constraints.unique.Unique;
 import at.tuwien.exception.ImageNotSupportedException;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.exception.TableMalformedException;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableRepository;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.Mappings;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
deleted file mode 100644
index 9eb0b5190252b7e1890deb7717fe9b2afc133d41..0000000000000000000000000000000000000000
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package at.tuwien.repository.jpa;
-
-import at.tuwien.entities.user.User;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-import java.util.Optional;
-import java.util.UUID;
-
-@Repository
-public interface UserRepository extends JpaRepository<User, UUID> {
-
-    Optional<User> findByUsername(String username);
-
-}
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java
similarity index 91%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java
index 52e9f9d0820aa261bf3629b76449c57d79e36d83..1cf729a25918fbbfc45f67dde2961e102a7a2b97 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index 39566b1cc0c471f71212f9319e1497d0e3dcac66..f41d2aa3fae70608ac913bde9ae299d57ce5b0a4 100644
--- a/dbrepo-database-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
similarity index 80%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
index a91fb2ee2f0a080878cfcdb1949c818f96296e9b..f117748c36d8d3cdcefc8074f9b37bc87c448e53 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.DatabaseAccess;
+import at.tuwien.entities.database.DatabaseAccessKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -8,7 +9,7 @@ import org.springframework.stereotype.Repository;
 import java.util.Optional;
 
 @Repository
-public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, Long> {
+public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> {
 
     @Query("select a from DatabaseAccess a where a.hdbid = :databaseId and a.user.username = :username")
     Optional<DatabaseAccess> findByDatabaseIdAndUsername(Long databaseId, String username);
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 97%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index f945f6eb2b36842ab96cfbab21e461617c9e76c4..2ea6e5234ac29a4c791c56a609a29da59e6ee0ac 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageEnvironmentRepository.java
similarity index 59%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageEnvironmentRepository.java
index c25e8577e29c929d1778ef407253e9970c74c04d..6bb192292f755b8e3706820c337a0e0b1dc0557b 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageEnvironmentRepository.java
@@ -1,11 +1,11 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
-import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
+import at.tuwien.entities.container.image.ContainerImageEnvironmentItemKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface ImageEnvironmentRepository extends JpaRepository<ContainerImageEnvironmentItem, Long> {
+public interface ImageEnvironmentRepository extends JpaRepository<ContainerImageEnvironmentItem, ContainerImageEnvironmentItemKey> {
 
 }
diff --git a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 88%
rename from dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index 247ce97770d636831aef83e8cc1a471ed67019a9..046fd51c3edd4a04becd27a2017cb38c88278ac7 100644
--- a/dbrepo-identifier-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
index 75c296f527e5a1b04d8a326673ca35f88519e842..fab911633e762bcca06113efbbed06e01f2e4e0f 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.semantics.Ontology;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b53e7245983c7ca848da7c1175e0158e2f2a930
--- /dev/null
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -0,0 +1,12 @@
+package at.tuwien.repository.mdb;
+
+import at.tuwien.entities.user.Realm;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.UUID;
+
+@Repository
+public interface RealmRepository extends JpaRepository<Realm, UUID> {
+
+}
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
similarity index 73%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
index 9441d45125e3f54d6545bbcb3e4b4e99a05d1bbf..de41d04da23a85fbaec1c8571b9394f14427ece2 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumn;
+import at.tuwien.entities.database.table.columns.TableColumnKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
similarity index 80%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
index c629a9b493f86fb49a2b84f77e82209fbad6dee6..77541d67b732c73ca9190e1f375f977069d5c480 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
@@ -1,7 +1,8 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.table.Table;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -9,7 +10,7 @@ import java.util.List;
 import java.util.Optional;
 
 @Repository
-public interface TableRepository extends JpaRepository<Table, Long> {
+public interface TableRepository extends JpaRepository<Table, TableKey> {
 
     List<Table> findByDatabaseOrderByCreatedDesc(Database database);
 
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java
similarity index 91%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java
index 69ae3d7e516b4dd80b0cb7a9e19f1b65677486a5..a88ba4ff4361615fe6cefd49a8550ae4185cc37f 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
new file mode 100644
index 0000000000000000000000000000000000000000..42d09c3e9eaecff5b277e10a724ebfb857a91c8b
--- /dev/null
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -0,0 +1,15 @@
+package at.tuwien.repository.mdb;
+
+import at.tuwien.entities.user.User;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.Optional;
+import java.util.UUID;
+
+@Repository
+public interface UserRepository extends JpaRepository<User, UUID> {
+
+    Optional<User> findByUsername(String username);
+
+}
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
similarity index 67%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
index 7df09d4e44e484f1e1a79beb9cd81c294b34d103..7fcd93f71355f255332880e121adeaca01aff919 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
@@ -1,9 +1,10 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.table.columns.ColumnDto;
+import at.tuwien.api.database.table.columns.ColumnKeyDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, Long> {
+public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, ColumnKeyDto> {
 }
\ No newline at end of file
diff --git a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
similarity index 69%
rename from dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
index ce6e8a0975a29bdcddaa03d316d0b158c1fd8139..f672e53c3bea431ed051e2965c79a0db731b3937 100644
--- a/dbrepo-semantics-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
@@ -1,9 +1,10 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.table.TableDto;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableIdxRepository extends ElasticsearchRepository<TableDto, Long> {
+public interface TableIdxRepository extends ElasticsearchRepository<TableDto, TableKey> {
 }
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
index 91d4f41a8a4078d50971f24139efa933b73cd508..85fc7196d4adc6e86bdb84f68ffdfb88d48fec6b 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
@@ -3,7 +3,7 @@ package at.tuwien.service.impl;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.AccessDeniedException;
 import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
 import at.tuwien.service.AccessService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index 35f7e99b84f038e2ee9e073ab80953378ac52a1b..13d425c5a9ed1a1524997d27348b89db9ce49e1d 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.ContainerNotFoundException;
-import at.tuwien.repository.jpa.ContainerRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
 import at.tuwien.service.ContainerService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
index ff16e63370f98039bbab81ff7ed26dc9dd619bea..a4437d6461f47a9bf441eb448b9574974e0acc64 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
@@ -2,13 +2,12 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.DatabaseNotFoundException;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import at.tuwien.service.DatabaseService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.security.Principal;
 import java.util.Optional;
 
 @Log4j2
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java
index 29d7a97826d4d04d197b541a61e0d231a014540b..1984eaf285320a5ab1a242e845047f1e37c6282e 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableRepository;
 import at.tuwien.service.MessageQueueService;
 import com.rabbitmq.client.*;
 import lombok.extern.log4j.Log4j2;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
index 94cd509ae86317051719b0c6e8027ef7d8940d44..fd1954ddd9ba6b887b976812bd2d9d4e97ab3748 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
@@ -8,9 +8,9 @@ import at.tuwien.exception.SemanticEntityNotFoundException;
 import at.tuwien.exception.UnitNotFoundException;
 import at.tuwien.gateway.SemanticServiceGateway;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.jpa.ConceptRepository;
-import at.tuwien.repository.jpa.OntologyRepository;
-import at.tuwien.repository.jpa.UnitRepository;
+import at.tuwien.repository.mdb.ConceptRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
+import at.tuwien.repository.mdb.UnitRepository;
 import at.tuwien.service.SemanticService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
index c0b1681e8b6da198b7e3fadcadd1c47ca6ab32ce..463dc7edd8f4c699d2c90cd2c80b69bbe83a66b8 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
@@ -10,10 +10,10 @@ import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.TableColumnRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableColumnRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.service.*;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
 import lombok.extern.log4j.Log4j2;
@@ -46,7 +46,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService
     public TableServiceImpl(TableMapper tableMapper, UserService userService, SemanticService semanticService,
                             TableRepository tableRepository, DatabaseService databaseService,
                             ContainerService containerService, TableIdxRepository tableIdxRepository,
-                            TableColumnRepository tableColumnRepository,
+                            at.tuwien.repository.mdb.TableColumnRepository tableColumnRepository,
                             TableColumnIdxRepository tableColumnIdxRepository) {
         this.tableMapper = tableMapper;
         this.userService = userService;
@@ -91,7 +91,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService
         tableRepository.delete(table);
         log.info("Deleted table with id {} in metadata database", table.getId());
         tableIdxRepository.delete(tableMapper.tableToTableDto(table));
-        log.info("Deleted table with id {} in search service", table.getId());
+        log.info("Deleted table with id {} in open search database", table.getId());
     }
 
     @Override
@@ -190,13 +190,13 @@ public class TableServiceImpl extends HibernateConnector implements TableService
         }
         /* save in metadata database */
         final Table table = tableRepository.save(entity);
-        log.info("Created table with id {}", table.getId());
-        log.trace("created table {}", table);
+        log.info("Created table with id {} in metadata database", table.getId());
         /* save in database_index - elastic search */
         tableIdxRepository.save(tableMapper.tableToTableDto(table));
+        log.info("Created table with id {} in open search database", table.getId());
         /* save in column_index - elastic search */
         tableColumnIdxRepository.saveAll(tableMapper.tableToTableDto(table).getColumns());
-        log.info("Saved table with id {} in elastic search", table.getId());
+        log.info("Saved table columns with table id {} in open search database", table.getId());
         return table;
     }
 
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 2c7df8b36c10c7ce06a26808f63422a0ccc30c93..47f1ac286b3fa39407359baf5cdc58a4f8d700f5 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-ui/.env.example b/dbrepo-ui/.env.example
index 48fd54b7861d0700d7203c50231c6138cdb39657..e1bec7f2bca376be3f8bb9ed34105851f0e3acb0 100644
--- a/dbrepo-ui/.env.example
+++ b/dbrepo-ui/.env.example
@@ -5,8 +5,8 @@ BROKER_PASSWORD="fda"
 DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG"
 DEFAULT_PID_PUBLISHER="Technische Universität Wien"
 DOI_URL="https://doi.org"
-ELASTIC_USERNAME="elastic"
-ELASTIC_PASSWORD="elastic"
+SEARCH_USERNAME="admin"
+SEARCH_PASSWORD="admin"
 LOGO="/logo.png"
 SEARCH="http://localhost:3001/retrieve"
 SHARED_FILESYSTEM="/tmp"
diff --git a/dbrepo-ui/Dockerfile b/dbrepo-ui/Dockerfile
index d014add23bfd9be2dbf766c8cfc0d0b9d72e958d..4b37385c0c034301c7e48047608f5adb908083bf 100644
--- a/dbrepo-ui/Dockerfile
+++ b/dbrepo-ui/Dockerfile
@@ -50,8 +50,8 @@ ENV BROKER_PASSWORD="fda"
 ENV SEARCH="http://search-db:9200"
 ENV SHARED_FILESYSTEM="/tmp"
 ENV LOGO="/logo.png"
-ENV ELASTIC_USERNAME="elastic"
-ENV ELASTIC_PASSWORD="elastic"
+ENV SEARCH_USERNAME="admin"
+ENV SEARCH_PASSWORD="admin"
 ENV VERSION="${TAG}"
 ENV TITLE="Database Repository"
 ENV ICON="/favicon.ico"
diff --git a/dbrepo-ui/config.js b/dbrepo-ui/config.js
index b12b7b7055b3bc0b08422bcd385093de08fdc742..e83a19c0c0a0cf7caf9d96c6b8709a9e9d9756bf 100644
--- a/dbrepo-ui/config.js
+++ b/dbrepo-ui/config.js
@@ -12,7 +12,7 @@ config.version = process.env.VERSION || 'latest'
 config.logo = process.env.LOGO || '/logo.png'
 config.mailVerify = process.env.MAIL_VERIFY || false
 config.tokenMax = process.env.TOKEN_MAX || 5
-config.elasticPassword = process.env.ELASTIC_PASSWORD || 'elastic'
+config.elasticPassword = process.env.SEARCH_PASSWORD || 'elastic'
 config.clientId = process.env.DBREPO_CLIENT_ID || 'dbrepo-client'
 config.clientSecret = process.env.DBREPO_CLIENT_SECRET || 'MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG'
 config.defaultPublisher = process.env.DEFAULT_PID_PUBLISHER || 'Example University'
diff --git a/dbrepo-user-service/Dockerfile b/dbrepo-user-service/Dockerfile
index fb50823d3c479dacb13530a0b9efed658d521c59..b3c9c5faa1b75aceafebf8a146db78fd874d84f5 100644
--- a/dbrepo-user-service/Dockerfile
+++ b/dbrepo-user-service/Dockerfile
@@ -33,7 +33,7 @@ ENV JWT_ISSUER="http://localhost/realms/dbrepo"
 ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
 ENV LOG_LEVEL=debug
 ENV DEFAULT_ROLE="default-researcher-roles"
-ENV ELASTIC_PASSWORD=elastic
+ENV SEARCH_PASSWORD=admin
 
 WORKDIR /app
 
diff --git a/dbrepo-user-service/pom.xml b/dbrepo-user-service/pom.xml
index 30e36bcba0c122d7376c44e8cd372668f0294f72..00656af9c7cc2f5c180067e68f748bd3ed061340 100644
--- a/dbrepo-user-service/pom.xml
+++ b/dbrepo-user-service/pom.xml
@@ -17,7 +17,7 @@
         also allows for view-only (possibly paginated and versioned) query execution to the raw data and consumes
         messages in the message queue from the Broker Service.
     </description>
-    <url>https://dbrepo-docs.ossdip.at</url>
+    <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/</url>
     <developers>
         <developer>
             <name>Martin Weise</name>
@@ -52,6 +52,7 @@
         <keycloak.version>21.0.2</keycloak.version>
         <hibernate.version>6.2.2.Final</hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -116,8 +117,14 @@
             <version>${mariadb.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Swagger -->
         <dependency>
diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java
index 4a6c3dff083b1ec4214b2f19a07d3839e6298368..a0d8a010300bbba49d1a95c1bed1b11a80d15d44 100644
--- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java
+++ b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -10,12 +11,12 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @EnableJpaAuditing
-@SpringBootApplication
 @EnableTransactionManagement
 @EnableScheduling
-@EntityScan(basePackages = "at.tuwien.entities")
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EntityScan(basePackages = {"at.tuwien.entities"})
+@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.sdb"})
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class FdaUserServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-user-service/rest-service/src/main/resources/application-local.yml b/dbrepo-user-service/rest-service/src/main/resources/application-local.yml
index e15f94b2cc50f9c62e045667cb5940994a29a7cb..eb5b84bcd252dfa2cff611ae92d2d1055699167a 100644
--- a/dbrepo-user-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-user-service/rest-service/src/main/resources/application-local.yml
@@ -25,10 +25,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
-  elasticsearch:
-    password: elastic
-    username: elastic
-    uris: http://localhost:9200
+  opensearch:
+    username: admin
+    password: admin
+    uris: localhost:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-user-service/rest-service/src/main/resources/application.yml b/dbrepo-user-service/rest-service/src/main/resources/application.yml
index 58ca1c7f57132a226ee7437ab48e3345e011becf..4e5e905427f79e85ec4302ce9c8d7d7b2631b058 100644
--- a/dbrepo-user-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-user-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
@@ -25,10 +27,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
-  elasticsearch:
-    password: "${ELASTIC_PASSWORD}"
-    username: elastic
-    uris: http://search-db:9200
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: search-db:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
index 041e444616f232b957b5d0f756382b760f7df36a..d63621139c5d7974660eaeaece1f34735ba0726e 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/ActuatorComponentTest.java
@@ -1,6 +1,8 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -22,6 +24,12 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @SpringBootTest
 public class ActuatorComponentTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private MockMvc mockMvc;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java
index 36097258c132aa0525a1d5c180ca150fc9709d68..329c1c57b399e298dad7ad3d1f89c4f009388b90 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/MaintenanceEndpointUnitTest.java
@@ -5,9 +5,11 @@ import at.tuwien.api.maintenance.BannerMessageBriefDto;
 import at.tuwien.api.maintenance.BannerMessageCreateDto;
 import at.tuwien.api.maintenance.BannerMessageDto;
 import at.tuwien.api.maintenance.BannerMessageUpdateDto;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.maintenance.BannerMessage;
 import at.tuwien.exception.*;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import at.tuwien.service.BannerMessageService;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -35,6 +37,12 @@ import static org.mockito.Mockito.*;
 @ExtendWith(SpringExtension.class)
 public class MaintenanceEndpointUnitTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @MockBean
     private ReadyConfig readyConfig;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
index 431a54052c11bc0eb4422c195e7242b829de65ce..c47f9dfbc7a25d37056ece68eab2cd163d55eacf 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/SwaggerComponentTest.java
@@ -1,6 +1,8 @@
 package at.tuwien.endpoint;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.config.IndexConfig;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
@@ -22,6 +24,12 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @SpringBootTest
 public class SwaggerComponentTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private MockMvc mockMvc;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java
index cec34bf0a50ad3b66641cbefc877a1fcd58d8854..088b60ed4797d40cfc4def24395fb779509398cc 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/endpoint/UserEndpointUnitTest.java
@@ -4,10 +4,12 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.api.auth.SignupRequestDto;
 import at.tuwien.api.user.*;
 import at.tuwien.config.AuthenticationConfig;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.Realm;
 import at.tuwien.entities.user.Role;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import at.tuwien.service.RealmService;
 import at.tuwien.service.RoleService;
 import at.tuwien.service.UserService;
@@ -40,6 +42,12 @@ import static org.mockito.Mockito.*;
 @ExtendWith(SpringExtension.class)
 public class UserEndpointUnitTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @MockBean
     private UserService userService;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java
index eefde32629df5e8dfc5cad2ce9d3f2818dca815a..1a8e6ee845d4f5f29caa56589a4401fccd213a22 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/mapper/UserMapperTest.java
@@ -1,10 +1,13 @@
 package at.tuwien.mapper;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.User;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -13,6 +16,12 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals;
 @SpringBootTest
 public class UserMapperTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Test
     public void equals_fails() {
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java
index 8759d8e3c684e7df97c79adcfa756e3b1a220f14..673b48458875961c2a2f5577f32a0bd44a9849ec 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/BannerMessageServiceIntegrationTest.java
@@ -4,13 +4,12 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.api.maintenance.BannerMessageCreateDto;
 import at.tuwien.api.maintenance.BannerMessageTypeDto;
 import at.tuwien.api.maintenance.BannerMessageUpdateDto;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.maintenance.BannerMessage;
 import at.tuwien.entities.maintenance.BannerMessageType;
-import at.tuwien.entities.user.Realm;
 import at.tuwien.exception.BannerMessageNotFoundException;
-import at.tuwien.exception.RealmNotFoundException;
-import at.tuwien.repository.jpa.BannerMessageRepository;
-import at.tuwien.repository.jpa.RealmRepository;
+import at.tuwien.repository.mdb.BannerMessageRepository;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -19,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -33,6 +33,12 @@ import static org.junit.jupiter.api.Assertions.*;
 @ExtendWith(SpringExtension.class)
 public class BannerMessageServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private BannerMessageRepository bannerMessageRepository;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java
index 53822947511046bfdc258e81fb11f0af22b3a697..5107c8fda008b1c5434e3fbf551595d37719f3af 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RealmServiceIntegrationTest.java
@@ -1,9 +1,11 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.Realm;
 import at.tuwien.exception.RealmNotFoundException;
-import at.tuwien.repository.jpa.RealmRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -12,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -24,6 +27,12 @@ import static org.junit.jupiter.api.Assertions.*;
 @ExtendWith(SpringExtension.class)
 public class RealmServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private RealmRepository realmRepository;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java
index 2cc1cd90399afa2eb9757625c6afa879de77a0c3..6d957b51a8381228887976bd96cd176a78a52ca3 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/RoleServiceIntegrationTest.java
@@ -1,13 +1,12 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.entities.user.Realm;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.Role;
-import at.tuwien.exception.RealmNotFoundException;
 import at.tuwien.exception.RoleNotFoundException;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.RoleRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.RoleRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -16,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -28,6 +28,12 @@ import static org.junit.jupiter.api.Assertions.*;
 @ExtendWith(SpringExtension.class)
 public class RoleServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private UserRepository userRepository;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java
index 70b28170937e8de1a288ddcd7da2369e61f75d08..95ce65f079107cb523eeb4a567284a95511db9b1 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserAttributeServiceIntegrationTest.java
@@ -1,13 +1,12 @@
 package at.tuwien.service;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.entities.user.Role;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.UserAttribute;
-import at.tuwien.exception.RoleNotFoundException;
 import at.tuwien.exception.UserAttributeNotFoundException;
-import at.tuwien.repository.jpa.RoleRepository;
-import at.tuwien.repository.jpa.UserAttributeRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserAttributeRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -16,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 
@@ -30,6 +30,12 @@ import static org.junit.jupiter.api.Assertions.*;
 @ExtendWith(SpringExtension.class)
 public class UserAttributeServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private UserRepository userRepository;
 
diff --git a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
index 52cb9f38f1b62fa33687549e68f6618ba451d2bb..1f13cf099824f2bdd681ded485618ee03673f03d 100644
--- a/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
+++ b/dbrepo-user-service/rest-service/src/test/java/at/tuwien/service/UserServiceIntegrationTest.java
@@ -5,13 +5,15 @@ import at.tuwien.api.auth.SignupRequestDto;
 import at.tuwien.api.user.UserPasswordDto;
 import at.tuwien.api.user.UserThemeSetDto;
 import at.tuwien.api.user.UserUpdateDto;
+import at.tuwien.config.IndexConfig;
 import at.tuwien.entities.user.Role;
 import at.tuwien.entities.user.User;
 import at.tuwien.entities.user.UserAttribute;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.RealmRepository;
-import at.tuwien.repository.jpa.RoleRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.RealmRepository;
+import at.tuwien.repository.mdb.RoleRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -20,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -37,6 +40,12 @@ import static org.junit.jupiter.api.Assertions.*;
 @ExtendWith(SpringExtension.class)
 public class UserServiceIntegrationTest extends BaseUnitTest {
 
+    @MockBean
+    private IndexConfig indexConfig;
+
+    @MockBean
+    private UserIdxRepository userIdxRepository;
+
     @Autowired
     private UserRepository userRepository;
 
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
deleted file mode 100644
index 58079c0b9c7c08d8c0ae75ee1ecf0191a7d19f65..0000000000000000000000000000000000000000
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/config/ElasticsearchConfig.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package at.tuwien.config;
-
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.json.jackson.JacksonJsonpMapper;
-import co.elastic.clients.transport.ElasticsearchTransport;
-import co.elastic.clients.transport.rest_client.RestClientTransport;
-import lombok.extern.log4j.Log4j2;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.elasticsearch.client.RestClient;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Log4j2
-@Configuration
-public class ElasticsearchConfig {
-
-    @Value("${spring.elasticsearch.uris}")
-    private String elasticEndpoint;
-
-    @Value("${spring.elasticsearch.username}")
-    private String elasticUsername;
-
-    @Value("${spring.elasticsearch.password}")
-    private String elasticPassword;
-
-    @Bean
-    public ElasticsearchClient elasticsearchClient() {
-        log.debug("elastic endpoint={}", elasticEndpoint);
-        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUsername, elasticPassword));
-        final RestClient restClient = RestClient.builder(HttpHost.create(elasticEndpoint))
-                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
-                        .setDefaultCredentialsProvider(credentialsProvider))
-                .build();
-        ElasticsearchTransport transport = new RestClientTransport(
-                restClient, new JacksonJsonpMapper());
-        return new ElasticsearchClient(transport);
-    }
-
-}
\ No newline at end of file
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/IndexConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/IndexConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..6859a272103959e83ce738225264dd97a1ac4f76
--- /dev/null
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/config/IndexConfig.java
@@ -0,0 +1,42 @@
+package at.tuwien.config;
+
+import at.tuwien.api.user.UserDto;
+import at.tuwien.mapper.UserMapper;
+import at.tuwien.repository.sdb.UserIdxRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Component
+@Log4j2
+public class IndexConfig {
+
+    private final UserMapper userMapper;
+    private final UserRepository userRepository;
+    private final UserIdxRepository userIdxRepository;
+
+    @Autowired
+    public IndexConfig(UserMapper userMapper, UserRepository userRepository,
+                       UserIdxRepository userIdxRepository) {
+        this.userMapper = userMapper;
+        this.userRepository = userRepository;
+        this.userIdxRepository = userIdxRepository;
+    }
+
+    @Transactional
+    @EventListener(ApplicationReadyEvent.class)
+    public void initIndex() {
+        final List<UserDto> users = userRepository.findAll()
+                .stream()
+                .map(userMapper::userToUserDto)
+                .toList();
+        userIdxRepository.saveAll(users);
+        log.info("Added {} users to OpenSearch index", users.size());
+    }
+}
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-user-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..4fc71bfb1c2bf06095b9b0fc95aea1a939e144ef
--- /dev/null
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,36 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    @Override
+    public RestHighLevelClient opensearchClient() {
+        log.debug("open search endpoint: {}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+}
\ No newline at end of file
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/BannerMessageRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java
similarity index 90%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/BannerMessageRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java
index bcdbf9f83266e10f0fab4f59126ffa936bb9b537..ee4048ede1b8dee2131c1522189407b83ebf17aa 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/BannerMessageRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/BannerMessageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.maintenance.BannerMessage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java
similarity index 89%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java
index d204a19345e7d27eec347ad8ea9b9a98ab997b1f..e9e9fdb8db0d291d79e478ea6f0590ab21987b78 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/CredentialRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/CredentialRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Credential;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
similarity index 90%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
index aabd612289f0130745444ceafe3f8fc67bd0bfd0..56d2152fa027b32d43ad2b966db167ba8ddae253 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Realm;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java
similarity index 89%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java
index 8669937f1d599162999a44dc28d5d8f9fdf73f04..345f96ff8afbf673b1153bd46d1b7310817aa936 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleMappingRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleMappingRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.RoleMapping;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleRepository.java
similarity index 90%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleRepository.java
index a3a4713f6864a9539344e5c413583e468863c4fe..f86422ec62a9b3949c0de4323e6306346ea60e37 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/RoleRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/RoleRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Role;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java
similarity index 87%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java
index e0c8531399f55fd72429eb7ead6f92e10c54fdf8..6d96fc3584c79bfddae43faa467e0ab543e90780 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserAttributeRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserAttributeRepository.java
@@ -1,10 +1,9 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.UserAttribute;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 91%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 48e7ab240f644a583d2bdbb9a54b8322a500b804..c4b162f681d89b74ce1c1f70970999e140e089b4 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/elastic/UserIdxRepository.java b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java
similarity index 70%
rename from dbrepo-user-service/services/src/main/java/at/tuwien/repository/elastic/UserIdxRepository.java
rename to dbrepo-user-service/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java
index 812cb439f61d9b708aac09589d28b9c39d100d8d..8f22ea7fe5e692a94a09799d74ae144605cd7bf3 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/repository/elastic/UserIdxRepository.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/repository/sdb/UserIdxRepository.java
@@ -1,10 +1,11 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
-import at.tuwien.api.identifier.IdentifierDto;
 import at.tuwien.api.user.UserDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.UUID;
+
 @Repository
-public interface UserIdxRepository extends ElasticsearchRepository<UserDto, Long> {
+public interface UserIdxRepository extends ElasticsearchRepository<UserDto, UUID> {
 }
\ No newline at end of file
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java
index 5c38de25fcf98665ee2d3945a35fd2082837256d..2e5bf099706549fcc22a08ba6be54bf5e49e9692 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/BannerMessageServiceImpl.java
@@ -5,7 +5,7 @@ import at.tuwien.api.maintenance.BannerMessageUpdateDto;
 import at.tuwien.entities.maintenance.BannerMessage;
 import at.tuwien.exception.BannerMessageNotFoundException;
 import at.tuwien.mapper.BannerMessageMapper;
-import at.tuwien.repository.jpa.BannerMessageRepository;
+import at.tuwien.repository.mdb.BannerMessageRepository;
 import at.tuwien.service.BannerMessageService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java
index b499b6c43bde74e44902af54109e464ee4c147a4..4ff1da34d84784ad626d3be3926d21949f593d39 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RealmServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.Realm;
 import at.tuwien.exception.RealmNotFoundException;
-import at.tuwien.repository.jpa.RealmRepository;
+import at.tuwien.repository.mdb.RealmRepository;
 import at.tuwien.service.RealmService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java
index 7766f31afb2972dba07689199c92d51b802a2048..3f65f7d920344b79d199f67b21da26891b8f690d 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/RoleServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.Role;
 import at.tuwien.exception.RoleNotFoundException;
-import at.tuwien.repository.jpa.RoleRepository;
+import at.tuwien.repository.mdb.RoleRepository;
 import at.tuwien.service.RoleService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java
index 14885f60f09fcb029818e9c517ad84a584c3176e..b8ef166f7ed067021c9157b11baa0c5e7fa86d08 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserAttributeServiceImpl.java
@@ -2,13 +2,12 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.UserAttribute;
 import at.tuwien.exception.UserAttributeNotFoundException;
-import at.tuwien.repository.jpa.UserAttributeRepository;
+import at.tuwien.repository.mdb.UserAttributeRepository;
 import at.tuwien.service.UserAttributeService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
diff --git a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 0d0d80b5b83e23ed12a251a7775ca17dac4e469b..b3e4a75d854de7fdd8085eae3cc6423d9f10eb1f 100644
--- a/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-user-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -1,15 +1,16 @@
 package at.tuwien.service.impl;
 
 import at.tuwien.api.auth.SignupRequestDto;
+import at.tuwien.api.user.UserDto;
 import at.tuwien.api.user.UserPasswordDto;
 import at.tuwien.api.user.UserThemeSetDto;
 import at.tuwien.api.user.UserUpdateDto;
 import at.tuwien.entities.user.*;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.UserMapper;
-import at.tuwien.repository.jpa.CredentialRepository;
-import at.tuwien.repository.jpa.RoleMappingRepository;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.CredentialRepository;
+import at.tuwien.repository.mdb.UserRepository;
+import at.tuwien.repository.sdb.UserIdxRepository;
 import at.tuwien.service.UserAttributeService;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
@@ -43,19 +44,18 @@ public class UserServiceImpl implements UserService {
 
     private final UserMapper userMapper;
     private final UserRepository userRepository;
+    private final UserIdxRepository userIdxRepository;
     private final UserAttributeService userAttributeService;
     private final CredentialRepository credentialRepository;
-    private final RoleMappingRepository roleMappingRepository;
 
     @Autowired
-    public UserServiceImpl(UserMapper userMapper, UserRepository userRepository,
-                           UserAttributeService userAttributeService, CredentialRepository credentialRepository,
-                           RoleMappingRepository roleMappingRepository) {
+    public UserServiceImpl(UserMapper userMapper, UserRepository userRepository, UserIdxRepository userIdxRepository,
+                           UserAttributeService userAttributeService, CredentialRepository credentialRepository) {
         this.userMapper = userMapper;
         this.userRepository = userRepository;
+        this.userIdxRepository = userIdxRepository;
         this.userAttributeService = userAttributeService;
         this.credentialRepository = credentialRepository;
-        this.roleMappingRepository = roleMappingRepository;
     }
 
     @Override
@@ -97,11 +97,16 @@ public class UserServiceImpl implements UserService {
         final UserAttribute userAttribute3 = userAttributeService.create(userMapper.tripleToUserAttribute(user.getId(),
                 "affiliation", ""));
         credential.setUserId(user.getId());
+        /* save in metadata database */
         credential = credentialRepository.save(credential);
         user.setCredentials(List.of(credential));
         user.setAttributes(List.of(userAttribute1, userAttribute2, userAttribute3));
         user.setRoles(List.of(role));
-        log.info("Created user with id {}", user.getId());
+        log.info("Created user with id {} in metadata database", user.getId());
+        /* save in open search database */
+        final UserDto userDto = userMapper.userToUserDto(user);
+        userIdxRepository.save(userDto);
+        log.info("Created user with id {} in open search database", user.getId());
         return user;
     }
 
diff --git a/docker-compose.yml b/docker-compose.yml
index 909b52556b9465f3e8300ea92fc54fb09bf39fe9..f4532513c97cf464d9ce154fa7c6cc7520ad3915 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -72,6 +72,8 @@ services:
         condition: service_started
       dbrepo-authentication-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -92,6 +94,8 @@ services:
     depends_on:
       dbrepo-authentication-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -138,6 +142,8 @@ services:
         condition: service_healthy
       dbrepo-authentication-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -160,10 +166,10 @@ services:
     depends_on:
       dbrepo-authentication-service:
         condition: service_healthy
-      dbrepo-search-db:
-        condition: service_started
       dbrepo-broker-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -184,6 +190,8 @@ services:
         condition: service_healthy
       dbrepo-authentication-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     volumes:
       - /tmp:/tmp
     logging:
@@ -206,6 +214,8 @@ services:
         condition: service_healthy
       dbrepo-metadata-db:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -245,6 +255,8 @@ services:
         condition: service_healthy
       dbrepo-authentication-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -268,6 +280,8 @@ services:
         condition: service_healthy
       dbrepo-authentication-service:
         condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
     logging:
       driver: json-file
 
@@ -296,19 +310,25 @@ services:
     restart: always
     container_name: dbrepo-search-db
     hostname: search-db
-    image: elasticsearch:8.7.1
+    image: opensearchproject/opensearch:2
     networks:
       core:
     ports:
       - 9200:9200
     env_file:
       - .env
+    healthcheck:
+      test: curl -s http://search-db:9200 > /dev/null || exit 1
     environment:
       discovery.type: "single-node"
-      ES_JAVA_OPTS: "-Xms2g -Xmx2g"
+      ES_JAVA_OPTS: "-Xms4g -Xmx4g"
       logger.level: "WARN"
+      plugins.security.disabled: "true"
       bootstrap.memory_lock: "true"
-      xpack.security.enabled: "true"
+    deploy:
+      resources:
+        limits:
+          memory: 4G
     volumes:
       - search-db-data:/usr/share/elasticsearch/data
     logging:
@@ -327,11 +347,6 @@ services:
       - .env
     volumes:
       - "/tmp:/tmp"
-    depends_on:
-      dbrepo-identifier-service:
-        condition: service_healthy
-      dbrepo-database-service:
-        condition: service_healthy
     logging:
       driver: json-file
 
@@ -363,10 +378,8 @@ services:
         condition: service_healthy
       dbrepo-metadata-service:
         condition: service_healthy
-      dbrepo-query-service:
-        condition: service_healthy
       dbrepo-search-db:
-        condition: service_started
+        condition: service_healthy
       dbrepo-semantics-service:
         condition: service_healthy
       dbrepo-table-service: