From 490ebdebc3dc8684ea419c88fa2b3b14e69662bd Mon Sep 17 00:00:00 2001 From: Sriharsha Chintalapani Date: Wed, 8 Jan 2025 01:38:08 -0800 Subject: [PATCH] Issue-19197: Deleting Data Product should delete the data asset relationships (#19208) * Issue-19197: Deleting Data Product should delete the data asset relationships * Issue-19197: Deleting Data Product should delete the data asset relationships * Minor: Fix the deleteByName * add tests for data product delete case * fix flaky tests * update data products fqn keyword mapping * Update table_index_mapping.json * fix flaky test * fix tests * fix flaky tests * fix flakiness --------- Co-authored-by: karanh37 Co-authored-by: Karan Hotchandani <33024356+karanh37@users.noreply.github.com> --- .../service/jdbi3/EntityRepository.java | 10 +- .../service/resources/EntityResource.java | 2 - .../resources/dqtests/TestSuiteResource.java | 2 +- .../service/search/SearchClient.java | 3 + .../service/search/SearchRepository.java | 8 + .../elasticsearch/ElasticSearchClient.java | 2 +- .../en/api_collection_index_mapping.json | 2 +- .../en/api_endpoint_index_mapping.json | 2 +- .../en/api_service_index_mapping.json | 2 +- .../elasticsearch/en/chart_index_mapping.json | 2 +- .../en/container_index_mapping.json | 2 +- .../dashboard_data_model_index_mapping.json | 2 +- .../en/dashboard_index_mapping.json | 2 +- .../en/dashboard_service_index_mapping.json | 2 +- .../en/database_index_mapping.json | 2 +- .../en/database_schema_index_mapping.json | 2 +- .../en/database_service_index_mapping.json | 2 +- .../en/messaging_service_index_mapping.json | 2 +- .../en/mlmodel_index_mapping.json | 2 +- .../en/mlmodel_service_index_mapping.json | 2 +- .../en/pipeline_index_mapping.json | 2 +- .../en/pipeline_service_index_mapping.json | 2 +- .../en/search_entity_index_mapping.json | 2 +- .../en/search_service_index_mapping.json | 2 +- .../en/storage_service_index_mapping.json | 2 +- .../en/stored_procedure_index_mapping.json | 2 +- .../elasticsearch/en/table_index_mapping.json | 2 +- .../elasticsearch/en/topic_index_mapping.json | 2 +- .../jp/api_collection_index_mapping.json | 2 +- .../jp/api_endpoint_index_mapping.json | 2 +- .../jp/api_service_index_mapping.json | 2 +- .../elasticsearch/jp/chart_index_mapping.json | 2 +- .../jp/container_index_mapping.json | 2 +- .../dashboard_data_model_index_mapping.json | 2 +- .../jp/dashboard_index_mapping.json | 2 +- .../jp/dashboard_service_index_mapping.json | 2 +- .../jp/database_index_mapping.json | 2 +- .../jp/database_schema_index_mapping.json | 2 +- .../jp/database_service_index_mapping.json | 2 +- .../jp/messaging_service_index_mapping.json | 2 +- .../jp/mlmodel_index_mapping.json | 2 +- .../jp/mlmodel_service_index_mapping.json | 2 +- .../jp/pipeline_index_mapping.json | 2 +- .../jp/pipeline_service_index_mapping.json | 2 +- .../jp/search_entity_index_mapping.json | 2 +- .../jp/search_service_index_mapping.json | 2 +- .../jp/storage_service_index_mapping.json | 2 +- .../jp/stored_procedure_index_mapping.json | 2 +- .../elasticsearch/jp/table_index_mapping.json | 2 +- .../elasticsearch/jp/topic_index_mapping.json | 2 +- .../zh/api_collection_index_mapping.json | 2 +- .../zh/api_endpoint_index_mapping.json | 2 +- .../zh/api_service_index_mapping.json | 2 +- .../elasticsearch/zh/chart_index_mapping.json | 2 +- .../zh/container_index_mapping.json | 2 +- .../dashboard_data_model_index_mapping.json | 2 +- .../zh/dashboard_index_mapping.json | 2 +- .../zh/dashboard_service_index_mapping.json | 2 +- .../zh/database_index_mapping.json | 2 +- .../zh/database_schema_index_mapping.json | 2 +- .../zh/database_service_index_mapping.json | 2 +- .../zh/messaging_service_index_mapping.json | 2 +- .../zh/mlmodel_index_mapping.json | 2 +- .../zh/mlmodel_service_index_mapping.json | 2 +- .../zh/pipeline_index_mapping.json | 2 +- .../zh/pipeline_service_index_mapping.json | 2 +- .../zh/search_entity_index_mapping.json | 2 +- .../zh/search_service_index_mapping.json | 2 +- .../zh/storage_service_index_mapping.json | 2 +- .../zh/stored_procedure_index_mapping.json | 2 +- .../elasticsearch/zh/table_index_mapping.json | 2 +- .../elasticsearch/zh/topic_index_mapping.json | 2 +- .../playwright/e2e/Flow/IngestionBot.spec.ts | 4 +- .../ui/playwright/e2e/Pages/Domains.spec.ts | 82 ++++++++- .../playwright/support/domain/DataProduct.ts | 6 +- .../resources/ui/playwright/utils/domain.ts | 164 +++++++++++++++--- 76 files changed, 309 insertions(+), 106 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java index 601f4b4dda9..03273955aff 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java @@ -1154,6 +1154,7 @@ public abstract class EntityRepository { String updatedBy, UUID id, boolean recursive, boolean hardDelete) { DeleteResponse response = deleteInternal(updatedBy, id, recursive, hardDelete); postDelete(response.entity()); + deleteFromSearch(response.entity(), hardDelete); return response; } @@ -1178,6 +1179,7 @@ public abstract class EntityRepository { name = quoteFqn ? quoteName(name) : name; DeleteResponse response = deleteInternalByName(updatedBy, name, recursive, hardDelete); postDelete(response.entity()); + deleteFromSearch(response.entity(), hardDelete); return response; } @@ -1188,12 +1190,12 @@ public abstract class EntityRepository { protected void postDelete(T entity) {} - public final void deleteFromSearch(T entity, EventType changeType) { + public final void deleteFromSearch(T entity, boolean hardDelete) { if (supportsSearch) { - if (changeType.equals(ENTITY_SOFT_DELETED)) { - searchRepository.softDeleteOrRestoreEntity(entity, true); - } else { + if (hardDelete) { searchRepository.deleteEntity(entity); + } else { + searchRepository.softDeleteOrRestoreEntity(entity, true); } } } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java index 7eda62b9082..98412e76a3d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/EntityResource.java @@ -361,7 +361,6 @@ public abstract class EntityResource response = repository.delete(securityContext.getUserPrincipal().getName(), id, recursive, hardDelete); - repository.deleteFromSearch(response.entity(), response.changeType()); if (hardDelete) { limits.invalidateCache(entityType); } @@ -380,7 +379,6 @@ public abstract class EntityResource response = repository.deleteByName( securityContext.getUserPrincipal().getName(), name, recursive, hardDelete); - repository.deleteFromSearch(response.entity(), response.changeType()); addHref(uriInfo, response.entity()); return response.toResponse(); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestSuiteResource.java b/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestSuiteResource.java index ce570d4346a..05acefd8ac5 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestSuiteResource.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/resources/dqtests/TestSuiteResource.java @@ -762,7 +762,7 @@ public class TestSuiteResource extends EntityResource response = repository.deleteLogicalTestSuite(securityContext, testSuite, hardDelete); - repository.deleteFromSearch(response.entity(), response.changeType()); + repository.deleteFromSearch(response.entity(), hardDelete); addHref(uriInfo, response.entity()); return response.toResponse(); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchClient.java b/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchClient.java index ade12dae4de..d764b11a8b0 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchClient.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchClient.java @@ -42,6 +42,7 @@ public interface SearchClient { String DELETE = "delete"; String GLOBAL_SEARCH_ALIAS = "all"; + String DATA_ASSET_SEARCH_ALIAS = "dataAsset"; String GLOSSARY_TERM_SEARCH_INDEX = "glossary_term_search_index"; String TAG_SEARCH_INDEX = "tag_search_index"; String DEFAULT_UPDATE_SCRIPT = "for (k in params.keySet()) { ctx._source.put(k, params.get(k)) }"; @@ -74,6 +75,8 @@ public interface SearchClient { String REMOVE_TAGS_CHILDREN_SCRIPT = "for (int i = 0; i < ctx._source.tags.length; i++) { if (ctx._source.tags[i].tagFQN == params.fqn) { ctx._source.tags.remove(i) }}"; + String REMOVE_DATA_PRODUCTS_CHILDREN_SCRIPT = + "for (int i = 0; i < ctx._source.dataProducts.length; i++) { if (ctx._source.dataProducts[i].fullyQualifiedName == params.fqn) { ctx._source.dataProducts.remove(i) }}"; String UPDATE_CERTIFICATION_SCRIPT = "if (ctx._source.certification != null && ctx._source.certification.tagLabel != null) {ctx._source.certification.tagLabel.style = params.style; ctx._source.certification.tagLabel.description = params.description; ctx._source.certification.tagLabel.tagFQN = params.tagFQN; ctx._source.certification.tagLabel.name = params.name; }"; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchRepository.java index 3cfe3b04dfb..015aa7639fa 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/search/SearchRepository.java @@ -16,6 +16,7 @@ import static org.openmetadata.service.search.SearchClient.GLOBAL_SEARCH_ALIAS; import static org.openmetadata.service.search.SearchClient.PROPAGATE_ENTITY_REFERENCE_FIELD_SCRIPT; import static org.openmetadata.service.search.SearchClient.PROPAGATE_FIELD_SCRIPT; import static org.openmetadata.service.search.SearchClient.PROPAGATE_TEST_SUITES_SCRIPT; +import static org.openmetadata.service.search.SearchClient.REMOVE_DATA_PRODUCTS_CHILDREN_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_DOMAINS_CHILDREN_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_OWNERS_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT; @@ -727,6 +728,13 @@ public class SearchRepository { indexMapping.getChildAliases(clusterAlias), List.of(new ImmutablePair<>(entityType + ".id", docId))); } + case Entity.DATA_PRODUCT -> searchClient.updateChildren( + GLOBAL_SEARCH_ALIAS, + new ImmutablePair<>("dataProducts.id", docId), + new ImmutablePair<>( + REMOVE_DATA_PRODUCTS_CHILDREN_SCRIPT, + Collections.singletonMap("fqn", entity.getFullyQualifiedName()))); + case Entity.TAG, Entity.GLOSSARY_TERM -> searchClient.updateChildren( GLOBAL_SEARCH_ALIAS, new ImmutablePair<>("tags.tagFQN", entity.getFullyQualifiedName()), diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchClient.java b/openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchClient.java index 5ffe54a23ad..09b952b0f99 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchClient.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/search/elasticsearch/ElasticSearchClient.java @@ -2212,7 +2212,7 @@ public class ElasticSearchClient implements SearchClient { private void updateElasticSearchByQuery(UpdateByQueryRequest updateByQueryRequest) { if (updateByQueryRequest != null && isClientAvailable) { updateByQueryRequest.setRefresh(true); - LOG.debug(SENDING_REQUEST_TO_ELASTIC_SEARCH, updateByQueryRequest); + LOG.info(SENDING_REQUEST_TO_ELASTIC_SEARCH, updateByQueryRequest); client.updateByQuery(updateByQueryRequest, RequestOptions.DEFAULT); } } diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/api_collection_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/api_collection_index_mapping.json index 4412d0b9d4d..7d2375914a4 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/api_collection_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/api_collection_index_mapping.json @@ -152,7 +152,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json index 4bad64a563d..9c3780bde69 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/api_endpoint_index_mapping.json @@ -236,7 +236,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/api_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/api_service_index_mapping.json index e5b166b75d2..09899efe95a 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/api_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/api_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/chart_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/chart_index_mapping.json index 4c07d3a82d4..55563789dea 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/chart_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/chart_index_mapping.json @@ -323,7 +323,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/container_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/container_index_mapping.json index 9377b882952..485b08cbe14 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/container_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/container_index_mapping.json @@ -245,7 +245,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json index cf14f2f8254..02407bd997c 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_data_model_index_mapping.json @@ -129,7 +129,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_index_mapping.json index 531775d00ba..b37992167d3 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_index_mapping.json @@ -301,7 +301,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json index 8a95a19bfd8..5650e456a59 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/dashboard_service_index_mapping.json @@ -243,7 +243,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/database_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/database_index_mapping.json index 6410fcce44b..dea0e25dae1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/database_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/database_index_mapping.json @@ -152,7 +152,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/database_schema_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/database_schema_index_mapping.json index 55cd7e04de1..8975b0caaf0 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/database_schema_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/database_schema_index_mapping.json @@ -129,7 +129,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/database_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/database_service_index_mapping.json index a9a06a28a62..5af7c4fac35 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/database_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/database_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json index ac26a4c5697..93d8f59b8bb 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/messaging_service_index_mapping.json @@ -243,7 +243,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json index 884ce04be35..1649ed83145 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_index_mapping.json @@ -145,7 +145,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json index 1799a171bb4..44cbb4e2df5 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/mlmodel_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_index_mapping.json index 89aa68e4d2e..c79e2342251 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_index_mapping.json @@ -128,7 +128,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json index d52eed9436e..7d26039dad1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/pipeline_service_index_mapping.json @@ -242,7 +242,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/search_entity_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/search_entity_index_mapping.json index f18800d7d4a..bfb708cabf7 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/search_entity_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/search_entity_index_mapping.json @@ -438,7 +438,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/search_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/search_service_index_mapping.json index e5b166b75d2..09899efe95a 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/search_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/search_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/storage_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/storage_service_index_mapping.json index e8b9c1087b8..daa0f2c2483 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/storage_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/storage_service_index_mapping.json @@ -239,7 +239,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json index e5381631d39..8a949cac758 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/stored_procedure_index_mapping.json @@ -139,7 +139,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/table_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/table_index_mapping.json index 7603a5aad1e..6894c8b1837 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/table_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/table_index_mapping.json @@ -451,7 +451,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/en/topic_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/en/topic_index_mapping.json index fdbd9874f03..104716d4cfb 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/en/topic_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/en/topic_index_mapping.json @@ -192,7 +192,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json index 963232c61a5..5f372f0cb65 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/api_collection_index_mapping.json @@ -201,7 +201,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json index 9615b637a06..6cea22a83d0 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/api_endpoint_index_mapping.json @@ -228,7 +228,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/api_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/api_service_index_mapping.json index b129fee387e..78f6bfae7ed 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/api_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/api_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/chart_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/chart_index_mapping.json index 63dc9bf7427..da41c7a885b 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/chart_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/chart_index_mapping.json @@ -348,7 +348,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/container_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/container_index_mapping.json index cbc2c0fb9c7..0ec9e3caf09 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/container_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/container_index_mapping.json @@ -180,7 +180,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json index ac97cf2da7a..16eab0e04b1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_data_model_index_mapping.json @@ -130,7 +130,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json index 34220063f91..6dd71d84cca 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_index_mapping.json @@ -182,7 +182,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json index 7580ed0e585..b37d23450de 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/dashboard_service_index_mapping.json @@ -234,7 +234,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/database_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/database_index_mapping.json index 2162b019c7c..2b8625f71d0 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/database_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/database_index_mapping.json @@ -201,7 +201,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json index e3d7d75c182..f54ea768c1f 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/database_schema_index_mapping.json @@ -128,7 +128,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/database_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/database_service_index_mapping.json index c5342182cba..e52673edca0 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/database_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/database_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json index a431db25f83..8555dddbb1f 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/messaging_service_index_mapping.json @@ -239,7 +239,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json index 3c43e7f576f..0bb981a02a9 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_index_mapping.json @@ -137,7 +137,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json index 8d8950f0e81..a626e291ad1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/mlmodel_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json index 719fbb0c696..0a88086a934 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_index_mapping.json @@ -116,7 +116,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json index 465c23b92fd..62f40905cf1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/pipeline_service_index_mapping.json @@ -234,7 +234,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json index 3d05a850134..585f67fce42 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/search_entity_index_mapping.json @@ -435,7 +435,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/search_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/search_service_index_mapping.json index b129fee387e..78f6bfae7ed 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/search_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/search_service_index_mapping.json @@ -244,7 +244,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json index c108d4be570..a8e480a1a7b 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/storage_service_index_mapping.json @@ -231,7 +231,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json index f7a2c585e4a..74dc0afdec8 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/stored_procedure_index_mapping.json @@ -131,7 +131,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/table_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/table_index_mapping.json index 0e40e44ba16..91053db2443 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/table_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/table_index_mapping.json @@ -446,7 +446,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/jp/topic_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/jp/topic_index_mapping.json index cc5d423d333..75e3a111406 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/jp/topic_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/jp/topic_index_mapping.json @@ -362,7 +362,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json index 315e65ca783..401aac8101e 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/api_collection_index_mapping.json @@ -140,7 +140,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json index 5562831c094..08c71c439f2 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/api_endpoint_index_mapping.json @@ -226,7 +226,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/api_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/api_service_index_mapping.json index 92f798d34c7..9bf5d4443d1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/api_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/api_service_index_mapping.json @@ -228,7 +228,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/chart_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/chart_index_mapping.json index dc6e1c89ef7..abea73a8058 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/chart_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/chart_index_mapping.json @@ -344,7 +344,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/container_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/container_index_mapping.json index 8747dffa51c..b8456805e43 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/container_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/container_index_mapping.json @@ -230,7 +230,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json index 6fc67b807ec..df4f72f7648 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_data_model_index_mapping.json @@ -117,7 +117,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json index f44807f639b..1c55d305b16 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_index_mapping.json @@ -236,7 +236,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json index f0e44beb8d4..7fb238b3e1a 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/dashboard_service_index_mapping.json @@ -224,7 +224,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/database_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/database_index_mapping.json index 5aeb73fc12a..df775a54b6b 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/database_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/database_index_mapping.json @@ -140,7 +140,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json index 1cb5cafc125..23f7e115e2a 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/database_schema_index_mapping.json @@ -117,7 +117,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/database_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/database_service_index_mapping.json index ac4cae0dada..d7e99922314 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/database_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/database_service_index_mapping.json @@ -228,7 +228,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json index 5905c5c4586..3fc002e1ab9 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/messaging_service_index_mapping.json @@ -226,7 +226,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json index cafb914e9b0..3fd2a901c7a 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_index_mapping.json @@ -131,7 +131,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json index 8034e3b1aff..315c7e72fd6 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/mlmodel_service_index_mapping.json @@ -228,7 +228,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json index d345bdb6c57..76629230e64 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_index_mapping.json @@ -117,7 +117,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json index 30e6757560a..db4e34b9189 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/pipeline_service_index_mapping.json @@ -224,7 +224,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json index 385a51afbf0..fef942a9065 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/search_entity_index_mapping.json @@ -426,7 +426,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/search_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/search_service_index_mapping.json index 92f798d34c7..9bf5d4443d1 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/search_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/search_service_index_mapping.json @@ -228,7 +228,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json index f6e08d84a61..7c278c1abbf 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/storage_service_index_mapping.json @@ -221,7 +221,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json index 05962f5a3a0..b658476dbfb 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/stored_procedure_index_mapping.json @@ -127,7 +127,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/table_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/table_index_mapping.json index a60e851a051..2aa220c986b 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/table_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/table_index_mapping.json @@ -442,7 +442,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-service/src/main/resources/elasticsearch/zh/topic_index_mapping.json b/openmetadata-service/src/main/resources/elasticsearch/zh/topic_index_mapping.json index a562e51e4f8..eea4513713e 100644 --- a/openmetadata-service/src/main/resources/elasticsearch/zh/topic_index_mapping.json +++ b/openmetadata-service/src/main/resources/elasticsearch/zh/topic_index_mapping.json @@ -180,7 +180,7 @@ } }, "fullyQualifiedName": { - "type": "text" + "type": "keyword" }, "description": { "type": "text" diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Flow/IngestionBot.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Flow/IngestionBot.spec.ts index d4d77dbe102..10124c8db5e 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Flow/IngestionBot.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Flow/IngestionBot.spec.ts @@ -114,13 +114,13 @@ test.describe('Ingestion Bot ', () => { await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); await selectDomain(page, domain1.data); - await addAssetsToDomain(page, domain1.data, domainAsset1); + await addAssetsToDomain(page, domain1, domainAsset1); // Add assets to domain 2 await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); await selectDomain(page, domain2.data); - await addAssetsToDomain(page, domain2.data, domainAsset2); + await addAssetsToDomain(page, domain2, domainAsset2); }); await test.step( diff --git a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts index 4a6ee233777..528eda7b740 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/e2e/Pages/Domains.spec.ts @@ -34,6 +34,7 @@ import { selectDomain, selectSubDomain, setupAssetsForDomain, + verifyDataProductAssetsAfterDelete, verifyDomain, } from '../../utils/domain'; import { sidebarClick } from '../../utils/sidebar'; @@ -61,7 +62,7 @@ test.describe('Domains', () => { await test.step('Add assets to domain', async () => { await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); - await addAssetsToDomain(page, domain.data, assets); + await addAssetsToDomain(page, domain, assets); }); await test.step('Delete domain using delete modal', async () => { @@ -100,7 +101,7 @@ test.describe('Domains', () => { await domain.create(apiContext); await sidebarClick(page, SidebarItem.DOMAIN); await page.reload(); - await addAssetsToDomain(page, domain.data, assets); + await addAssetsToDomain(page, domain, assets); await test.step('Create DataProducts', async () => { await selectDomain(page, domain.data); @@ -115,7 +116,11 @@ test.describe('Domains', () => { await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); await selectDataProduct(page, domain.data, dataProduct1.data); - await addAssetsToDataProduct(page, dataProduct1.data, assets); + await addAssetsToDataProduct( + page, + dataProduct1.data.fullyQualifiedName ?? '', + assets + ); }); await test.step('Remove assets from DataProducts', async () => { @@ -220,7 +225,7 @@ test.describe('Domains', () => { await domain.create(apiContext); await page.reload(); await sidebarClick(page, SidebarItem.DOMAIN); - await addAssetsToDomain(page, domain.data, assets); + await addAssetsToDomain(page, domain, assets); await page.getByTestId('documentation').click(); const updatedDomainName = 'PW Domain Updated'; @@ -264,6 +269,71 @@ test.describe('Domains', () => { await domain.delete(apiContext); await afterAction(); }); + + test('Should clear assets from data products after deletion of data product in Domain', async ({ + page, + }) => { + const { afterAction, apiContext } = await getApiContext(page); + const { assets, assetCleanup } = await setupAssetsForDomain(page); + const domain = new Domain({ + name: 'PW_Domain_Delete_Testing', + displayName: 'PW_Domain_Delete_Testing', + description: 'playwright domain description', + domainType: 'Aggregate', + fullyQualifiedName: 'PW_Domain_Delete_Testing', + }); + const dataProduct1 = new DataProduct(domain, 'PW_DataProduct_Sales'); + const dataProduct2 = new DataProduct(domain, 'PW_DataProduct_Finance'); + + const domain1 = new Domain({ + name: 'PW_Domain_Delete_Testing', + displayName: 'PW_Domain_Delete_Testing', + description: 'playwright domain description', + domainType: 'Aggregate', + fullyQualifiedName: 'PW_Domain_Delete_Testing', + }); + const newDomainDP1 = new DataProduct(domain1, 'PW_DataProduct_Sales'); + const newDomainDP2 = new DataProduct(domain1, 'PW_DataProduct_Finance'); + + try { + await domain.create(apiContext); + await dataProduct1.create(apiContext); + await dataProduct2.create(apiContext); + await sidebarClick(page, SidebarItem.DOMAIN); + await page.reload(); + await addAssetsToDomain(page, domain, assets); + await verifyDataProductAssetsAfterDelete(page, { + domain, + dataProduct1, + dataProduct2, + assets, + }); + + await test.step( + 'Delete domain & recreate the same domain and data product', + async () => { + await domain.delete(apiContext); + await domain1.create(apiContext); + await newDomainDP1.create(apiContext); + await newDomainDP2.create(apiContext); + await page.reload(); + await redirectToHomePage(page); + await sidebarClick(page, SidebarItem.DOMAIN); + await selectDataProduct(page, domain1.data, newDomainDP1.data); + await checkAssetsCount(page, 0); + await sidebarClick(page, SidebarItem.DOMAIN); + await selectDataProduct(page, domain1.data, newDomainDP2.data); + await checkAssetsCount(page, 0); + } + ); + } finally { + await newDomainDP1.delete(apiContext); + await newDomainDP2.delete(apiContext); + await domain1.delete(apiContext); + await assetCleanup(); + await afterAction(); + } + }); }); test.describe('Domains Rbac', () => { @@ -343,13 +413,13 @@ test.describe('Domains Rbac', () => { await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); await selectDomain(page, domain1.data); - await addAssetsToDomain(page, domain1.data, domainAssset1); + await addAssetsToDomain(page, domain1, domainAssset1); // Add assets to domain 2 await redirectToHomePage(page); await sidebarClick(page, SidebarItem.DOMAIN); await selectDomain(page, domain2.data); - await addAssetsToDomain(page, domain2.data, domainAssset2); + await addAssetsToDomain(page, domain2, domainAssset2); }); await test.step('User with access to multiple domains', async () => { diff --git a/openmetadata-ui/src/main/resources/ui/playwright/support/domain/DataProduct.ts b/openmetadata-ui/src/main/resources/ui/playwright/support/domain/DataProduct.ts index 6c60b130350..b932c61edaa 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/support/domain/DataProduct.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/support/domain/DataProduct.ts @@ -15,6 +15,7 @@ import { uuid } from '../../utils/common'; import { EntityTypeEndpoint } from '../entity/Entity.interface'; import { EntityClass } from '../entity/EntityClass'; import { Domain } from './Domain'; +import { SubDomain } from './SubDomain'; type UserTeamRef = { name: string; @@ -45,9 +46,10 @@ export class DataProduct extends EntityClass { responseData: ResponseDataType = {} as ResponseDataType; - constructor(domain: Domain, name?: string) { + constructor(domain: Domain, name?: string, subDomain?: SubDomain) { super(EntityTypeEndpoint.DATA_PRODUCT); - this.data.domain = domain.data.name; + this.data.domain = + domain.data.name + (subDomain ? `.${subDomain?.data.name}` : ''); // fqn this.data.name = name ?? this.data.name; // eslint-disable-next-line no-useless-escape this.data.fullyQualifiedName = `\"${this.data.name}\"`; diff --git a/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts b/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts index e552e77bbeb..8dea2d06f99 100644 --- a/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts +++ b/openmetadata-ui/src/main/resources/ui/playwright/utils/domain.ts @@ -10,8 +10,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { expect, Page } from '@playwright/test'; +import test, { expect, Page } from '@playwright/test'; import { get, isEmpty, isUndefined } from 'lodash'; +import { SidebarItem } from '../constant/sidebar'; import { DataProduct } from '../support/domain/DataProduct'; import { Domain } from '../support/domain/Domain'; import { SubDomain } from '../support/domain/SubDomain'; @@ -27,8 +28,10 @@ import { INVALID_NAMES, NAME_MAX_LENGTH_VALIDATION_ERROR, NAME_VALIDATION_ERROR, + redirectToHomePage, } from './common'; import { addOwner } from './entity'; +import { sidebarClick } from './sidebar'; export const assignDomain = async (page: Page, domain: Domain['data']) => { await page.getByTestId('add-domain').click(); @@ -113,13 +116,45 @@ export const selectSubDomain = async ( domain: Domain['data'], subDomain: SubDomain['data'] ) => { - await page - .getByRole('menuitem', { name: domain.displayName }) - .locator('span') - .click(); + const menuItem = page.getByRole('menuitem', { name: domain.displayName }); + const isSelected = await menuItem.evaluate((element) => { + return element.classList.contains('ant-menu-item-selected'); + }); + + if (!isSelected) { + const subDomainRes = page.waitForResponse( + '/api/v1/search/query?*&from=0&size=50&index=domain_search_index' + ); + await menuItem.click(); + await subDomainRes; + } await page.getByTestId('subdomains').getByText('Sub Domains').click(); + const res = page.waitForResponse( + '/api/v1/search/query?*&index=data_product_search_index' + ); await page.getByTestId(subDomain.name).click(); + await res; +}; + +export const selectDataProductFromTab = async ( + page: Page, + dataProduct: DataProduct['data'] +) => { + const dpRes = page.waitForResponse( + '/api/v1/search/query?*&from=0&size=50&index=data_product_search_index' + ); + await page.getByText('Data Products').click(); + + await dpRes; + + const dpDataRes = page.waitForResponse('/api/v1/dataProducts/name/*'); + + await page + .getByTestId(`explore-card-${dataProduct.name}`) + .getByTestId('entity-link') + .click(); + await dpDataRes; }; export const selectDataProduct = async ( @@ -132,11 +167,7 @@ export const selectDataProduct = async ( .locator('span') .click(); - await page.getByText('Data Products').click(); - await page - .getByTestId(`explore-card-${dataProduct.name}`) - .getByTestId('entity-link') - .click(); + await selectDataProductFromTab(page, dataProduct); }; const goToAssetsTab = async (page: Page, domain: Domain['data']) => { @@ -280,10 +311,13 @@ export const createSubDomain = async ( export const addAssetsToDomain = async ( page: Page, - domain: Domain['data'], - assets: EntityClass[] + domain: Domain, + assets: EntityClass[], + navigateToAssetsTab = true ) => { - await goToAssetsTab(page, domain); + if (navigateToAssetsTab) { + await goToAssetsTab(page, domain.data); + } await checkAssetsCount(page, 0); await expect(page.getByTestId('no-data-placeholder')).toContainText( @@ -309,14 +343,16 @@ export const addAssetsToDomain = async ( await page.locator(`[data-testid="table-data-card_${fqn}"] input`).check(); } - const assetsAddRes = page.waitForResponse( - `/api/v1/domains/${encodeURIComponent( - domain.fullyQualifiedName ?? '' - )}/assets/add` - ); + const assetsAddRes = page.waitForResponse(`/api/v1/domains/*/assets/add`); await page.getByTestId('save-btn').click(); await assetsAddRes; + const countRes = page.waitForResponse( + '/api/v1/search/query?q=*&index=all&from=0&size=15' + ); + await page.reload(); + await countRes; + await checkAssetsCount(page, assets.length); }; @@ -357,7 +393,7 @@ export const addServicesToDomain = async ( export const addAssetsToDataProduct = async ( page: Page, - dataProduct: DataProduct['data'], + dataProductFqn: string, assets: EntityClass[] ) => { await page.getByTestId('assets').click(); @@ -383,9 +419,7 @@ export const addAssetsToDataProduct = async ( } const assetsAddRes = page.waitForResponse( - `/api/v1/dataProducts/${encodeURIComponent( - dataProduct.fullyQualifiedName ?? '' - )}/assets/add` + `/api/v1/dataProducts/*/assets/add` ); await page.getByTestId('save-btn').click(); await assetsAddRes; @@ -458,3 +492,89 @@ export const createDataProduct = async ( await page.getByTestId('save-data-product').click(); await saveRes; }; + +export const verifyDataProductAssetsAfterDelete = async ( + page: Page, + { + domain, + dataProduct1, + dataProduct2, + assets, + subDomain, + }: { + domain: Domain; + dataProduct1: DataProduct; + dataProduct2: DataProduct; + assets: EntityClass[]; + subDomain?: SubDomain; + } +) => { + const { apiContext } = await getApiContext(page); + const newDataProduct1 = new DataProduct(domain, 'PW_DataProduct_Sales'); + + await test.step('Add assets to DataProduct Sales', async () => { + await redirectToHomePage(page); + await sidebarClick(page, SidebarItem.DOMAIN); + if (subDomain) { + await selectSubDomain(page, domain.data, subDomain.data); + await selectDataProductFromTab(page, dataProduct1.data); + } else { + await selectDataProduct(page, domain.data, dataProduct1.data); + } + await addAssetsToDataProduct( + page, + dataProduct1.responseData.fullyQualifiedName ?? '', + assets.slice(0, 2) + ); + }); + + await test.step('Add assets to DataProduct Finance', async () => { + await redirectToHomePage(page); + await sidebarClick(page, SidebarItem.DOMAIN); + if (subDomain) { + await selectSubDomain(page, domain.data, subDomain.data); + await selectDataProductFromTab(page, dataProduct2.data); + } else { + await selectDataProduct(page, domain.data, dataProduct2.data); + } + await addAssetsToDataProduct( + page, + dataProduct2.responseData.fullyQualifiedName ?? '', + [assets[2]] + ); + }); + + await test.step( + 'Remove Data Product Sales and Create the same again', + async () => { + // Remove sales data product + await dataProduct1.delete(apiContext); + + // Create sales data product again + await redirectToHomePage(page); + await sidebarClick(page, SidebarItem.DOMAIN); + if (subDomain) { + await selectSubDomain(page, domain.data, subDomain.data); + } else { + await selectDomain(page, domain.data); + } + + await createDataProduct(page, newDataProduct1.data); + } + ); + + await test.step( + 'Verify assets are not present in the newly created data product', + async () => { + await redirectToHomePage(page); + await sidebarClick(page, SidebarItem.DOMAIN); + if (subDomain) { + await selectSubDomain(page, domain.data, subDomain.data); + await selectDataProductFromTab(page, newDataProduct1.data); + } else { + await selectDataProduct(page, domain.data, newDataProduct1.data); + } + await checkAssetsCount(page, 0); + } + ); +};